使用C#中的XmlReader读取特定深度的XML ELEMENTS

时间:2016-08-08 11:29:42

标签: c# .net xmlreader

我有一个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();
       }
}

1 个答案:

答案 0 :(得分:1)

您可以使用Descendants功能:

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

它会在xml&#39; s Depth2

下找到所有Root个元素

对于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();
    }
}