如何获取一个节点的所有直接子节点的集合?
How to get a collection of all direct child nodes of a node?
在 C# 中,您可以使用 SelectNodes()
API 调用并传递 XPath
.
来查询 XmlNode
以查找其子节点
获取直接子节点集合的XPath
是什么?
例如,
<actions>
<if operation="A">
<if operation="B">
<store>some value</store>
<if operation="C"> .... </if>
</if>
</if>
<store>value</store>
</actions>
在上面的示例中,我需要获取 <actions>
的直接子节点 - 节点:<if operation="A">
和 <store>
。
由于 XML 的递归性质,每个 if
节点都可以包含另一个 if
的列表。
我试过 actionNode.SelectNodes("child::*")
但它给了我 <action>
下面的整个节点树(假设 actionNode
指向 <action>
XML)。
节点的直接子节点可通过节点的 ChildNodes
属性 使用。请参阅下面的使用方法。
[TestMethod]
public void MyTestMethod3()
{
var xml = new XmlDocument();
xml.LoadXml(
@"<actions>
<if operation=""A"">
<if operation=""B"">
<store>some value</store>
<if operation=""C""> .... </if>
</if>
</if>
<store>value</store>
</actions>
");
var actionsNode = xml.SelectSingleNode("/actions");
// all direct child nodes are available through node.ChildNodes property
var directChildren = actionsNode.ChildNodes;
// here is the proof:
CollectionAssert.AreEquivalent(
new string[] { "if", "store" },
directChildren.Cast<XmlNode>().Select(i => i.Name).ToArray());
}
在 C# 中,您可以使用 SelectNodes()
API 调用并传递 XPath
.
XmlNode
以查找其子节点
获取直接子节点集合的XPath
是什么?
例如,
<actions>
<if operation="A">
<if operation="B">
<store>some value</store>
<if operation="C"> .... </if>
</if>
</if>
<store>value</store>
</actions>
在上面的示例中,我需要获取 <actions>
的直接子节点 - 节点:<if operation="A">
和 <store>
。
由于 XML 的递归性质,每个 if
节点都可以包含另一个 if
的列表。
我试过 actionNode.SelectNodes("child::*")
但它给了我 <action>
下面的整个节点树(假设 actionNode
指向 <action>
XML)。
节点的直接子节点可通过节点的 ChildNodes
属性 使用。请参阅下面的使用方法。
[TestMethod]
public void MyTestMethod3()
{
var xml = new XmlDocument();
xml.LoadXml(
@"<actions>
<if operation=""A"">
<if operation=""B"">
<store>some value</store>
<if operation=""C""> .... </if>
</if>
</if>
<store>value</store>
</actions>
");
var actionsNode = xml.SelectSingleNode("/actions");
// all direct child nodes are available through node.ChildNodes property
var directChildren = actionsNode.ChildNodes;
// here is the proof:
CollectionAssert.AreEquivalent(
new string[] { "if", "store" },
directChildren.Cast<XmlNode>().Select(i => i.Name).ToArray());
}