【发布时间】:2012-07-31 12:32:15
【问题描述】:
我想在不使用递归的情况下从给定节点获取所有子节点直到离开。那可能吗?我知道如何在 LINQ to XML 中执行此操作,但是 XmlNode:S 存在一些问题
【问题讨论】:
我想在不使用递归的情况下从给定节点获取所有子节点直到离开。那可能吗?我知道如何在 LINQ to XML 中执行此操作,但是 XmlNode:S 存在一些问题
【问题讨论】:
您可以将SelectNodes method 与选择所有后代的 XPath 表达式一起使用:
XmlNodeList result = myXmlNode.SelectNodes("descendant::node()");
如果您想更具体地过滤并需要提供任何命名空间前缀,请确保使用other overload。
更新:这只会选择非属性节点,因为您的问题不要求属性。不过可以通过修改 XPath 表达式来实现:
XmlnodeList result = myXmlNode.SelectNodes("descendant::node() | descendant::*/@*");
【讨论】:
您可以使用递归或 XPath 表达式:
我不太擅长 XPath,但类似:
var nodes = myDoc.SelectNodes("//*");
(编辑:这个似乎有效)
【讨论】:
*不会选择其他类型的节点。
// 意味着考虑从根开始的所有内容,而不仅仅是当前子树。