【问题标题】:Get all descendants of given XmlNode获取给定 XmlNode 的所有后代
【发布时间】:2012-07-31 12:32:15
【问题描述】:

我想在不使用递归的情况下从给定节点获取所有子节点直到离开。那可能吗?我知道如何在 LINQ to XML 中执行此操作,但是 XmlNode:S 存在一些问题

【问题讨论】:

    标签: c# xml xmlnode


    【解决方案1】:

    您可以将SelectNodes method 与选择所有后代的 XPath 表达式一起使用:

    XmlNodeList result = myXmlNode.SelectNodes("descendant::node()");
    

    如果您想更具体地过滤并需要提供任何命名空间前缀,请确保使用other overload

    更新:这只会选择非属性节点,因为您的问题不要求属性。不过可以通过修改 XPath 表达式来实现:

    XmlnodeList result = myXmlNode.SelectNodes("descendant::node() | descendant::*/@*");
    

    【讨论】:

      【解决方案2】:

      您可以使用递归或 XPath 表达式:

      我不太擅长 XPath,但类似:

       var nodes = myDoc.SelectNodes("//*");  
      

      (编辑:这个似乎有效)

      【讨论】:

      • 不过,仅适用于元素。 *不会选择其他类型的节点。
      • 另外,您是从文档中间的任意节点尝试过,还是仅从根节点尝试过?我没有,文档也没有明确说明这一点,但通常// 意味着考虑从根开始的所有内容,而不仅仅是当前子树。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多