如何获取一个节点的所有直接子节点的集合?

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