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