【问题标题】:Get names of all child-elements of a node in Xml-Deserialization在 Xml-Deserialization 中获取节点的所有子元素的名称
【发布时间】:2017-10-17 09:40:03
【问题描述】:

我得到了以下 XML 结构:

<Root>
    <Element Attribute="attibute">
        <ElementINeedNameOf />
        <AnotherElementINeedNameOf />
    </Element>
</Root>

我正在尝试读取element 的子元素的名称? 因此我使用System.Xml.Serialization 来读取其他元素/属性,但我无法读取它的子元素的名称。

谢谢。

【问题讨论】:

  • 通常“有没有办法……” 问题表明缺乏尝试。请展示您尝试过的工作和研究
  • 您始终可以自己遍历XmlDocument 的层次结构。
  • System.Xml.Serialization 是关于将内存中的对象序列化为 XML(并将它们反序列化)。使用它来解析 XML 可能不是最好的方法。考虑使用System.Xml.Linq 命名空间(起点:XDocument 类)。
  • 是的,色狼有办法。您可以使用XmlSerializer.UnknownNode 事件。

标签: c# xml xmlserializer


【解决方案1】:

可以通过选择带有XmlAnyElement的父元素来实现。

以下代码显示了一个示例解决方案:

[XmlAnyElement("Element")]
public XmlElement Elements{ get; set; }

[XmlIgnore]
public List<string> ElementNames
{
    get
    {
        var elementNames = new List<string>();
        if (Elements != null && Elements.HasChildNodes)
        {
            elementNames.AddRange(from XmlNode elementsChildNode in Elements .ChildNodes select elementsChildNode.Name);
            return elementNames ;
        }
        else
        {
            //return empty List
            return tagNames;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多