在 C# 中使用 XmlReader 读取特定深度 XML 个元素
Read particular depth XML ELEMENTS using XmlReader in C#
我有一个 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();
}
}
您可以使用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();
}
}
我有一个 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();
}
}
您可以使用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();
}
}