【问题标题】:Read particular depth XML ELEMENTS using XmlReader in C#在 C# 中使用 XmlReader 读取特定深度的 XML ELEMENTS
【发布时间】:2016-08-08 11:29:42
【问题描述】:

我有一个 XML 文件,其中包含不同深度的一些节点。我需要一个代码来读取特定的深度节点但不是全部,并且只能通过在 C# 中使用 XmlReader。

有人可以帮助我吗?

下面是我的 XML 结构。我只想读取“Depth2”节点。

<Depth0>
    <Depth1>
        <Depth2/>
        <Depth2/>
        <Depth2/>
    </Depth1>
    <Depth1>
        <Depth2/>
        <Depth2/>
        <Depth2/>
    </Depth1>
    <Depth1>
        <Depth2/>
        <Depth2/>
        <Depth2/>
    </Depth1>
</Depth0>

代码:

using (var reader = XmlReader.Create("D:\\xyz.xml"))
{
    while (reader.Read())
    {
        if (reader.Depth == 4 && reader.NodeType == XmlNodeType.Element)
        {
            XmlReader chnode = reader.ReadSubtree();
            AddItems(chnode);
        }
        else
            reader.MoveToElement();
       }
}

【问题讨论】:

  • 你试过什么?你查到了什么?还请添加您的 xml 示例
  • 您好 Gilad Green,感谢您的快速回复。

标签: c# .net xmlreader


【解决方案1】:

你可以使用Descendants函数:

var result = XDocument.Load("data.xml").Root
                      .Descendants("Depth2");

它会在 xml 的 Root 下的任何位置为您找到所有 Depth2 元素


对于XmlReader,您可以:

List<XmlNode> nodes = new List<XmlNode>();
using (var reader = XmlReader.Create("data.xml"))
{
    XmlDocument document = new XmlDocument();
    while (reader.Read())
    {
        if (reader.Depth == 2 && reader.NodeType == XmlNodeType.Element)
        {
            XmlNode node = document.CreateNode(XmlNodeType.Element, reader.Name, "");
            //Here I just added all the inner xml but you can do whatever you need
            node.InnerXml = reader.ReadInnerXml();

            nodes.Add(node);
        }
        reader.MoveToElement();
    }
}

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2012-10-20
    • 2023-03-30
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多