如何用同名节点的所有子节点填充 XmlNodeList?

Posted

技术标签:

【中文标题】如何用同名节点的所有子节点填充 XmlNodeList?【英文标题】:How populate XmlNodeList with all the children of a node with the same name? 【发布时间】:2011-07-07 22:54:53 【问题描述】:

给定一个包含以下 XML 片段的 XmlNode,我如何用书节点填充 XmlNodeList?

XMLNode 节点库包含:

<library>
  <book>
      <title>Three Little Pigs</title>
  </book>
  <book>
      <title>Batman</title>
  </book>
  <address>123 Main St.</address>
  <phone>111-111-1111</phone>
</library>

这应该很容易,但我想不通:

A) 无法将类型“System.Xml.XmlElement”隐式转换为“System.Xml.XmlNodeList”:

XmlNodeList books = nodeLibrary["book"];

我猜上面的方法属性快捷方式假设有一个名为 book 的子,而不是多个!

B) XmlNode 没有 GetChildren() 方法:

XmlNodeList books = nodeLibrary.GetChildren("book");

C) XmlNode 的ChildNodes 属性获取所有子节点,而不仅仅是书节点。

D) 我尝试使用 SelectNodes() 方法,但根是较大的文档,而不是当前 XmlNode 中的库片段,该库片段是之前使用 SelectNodes 从较大的文档中选择的。

有什么想法吗? 皮特

【问题讨论】:

必须是XmlNodeList吗? 【参考方案1】:

您可以使用 SelectNodes,并在 XPath 查询中传递一个 '.'从该节点开始搜索:

public class ***_6618097

    const string XML = @"<buildings>
 <library>
  <book>
   <title>Three Little Pigs</title>
  </book>
  <book>
   <title>Batman</title>
  </book>
  <address>123 Main St.</address>
  <phone>111-111-1111</phone>
  <hidden>
   <book>
    <title>The Hidden Treasure</title>
   </book>
  </hidden>
 </library>
 <bookstore>
  <book>
   <title>Cat in the Hat</title>
  </book>
 </bookstore>
</buildings>";

    public static void Test()
    
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(XML);
        XmlNode libraryNode = doc.SelectSingleNode("//library");
        XmlNodeList libraryBooks = libraryNode.SelectNodes(".//book");
        Console.WriteLine("Books: 0", libraryBooks.Count);
        foreach (XmlNode node in libraryBooks)
        
            Console.WriteLine(node.OuterXml);
        
    

【讨论】:

可能最好使用./book 过滤直接子代而不是所有后代。 对了,我加了“隐藏宝藏”的例子,说明代码会返回所有的后代;感谢您添加这些额外信息。

以上是关于如何用同名节点的所有子节点填充 XmlNodeList?的主要内容,如果未能解决你的问题,请参考以下文章

如何用分组方法计算2层对象之间的拓扑?

2021-10-08:填充每个节点的下一个右侧节点指针。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找

Castor XML Mapping 与子节点同名

如何用bat批量移动文件夹内与文件夹同名的文件到指定文件夹?

如何用js获取某个img标签节点的所有属性名

如何删除 Firebase 节点中除最近的 X 子节点之外的所有子节点?