用于选择所有节点的XPath表达式

时间:2011-08-22 05:53:28

标签: c# .net xml xpath

我想在给定的XmlNode中找到所有<Field />个节点(可以任意嵌套)。

如果做这样的事情:

foreach(XmlNode n in node.SelectNodes('//Field'))...

这将返回整个文档中的所有节点,而不是node下的所有节点。

这是XPath应该如何工作的?我查看了一些文档,似乎//Node查询应限定为它所调用的任何节点。

是否有其他技术可以选择特定节点下具有给定名称的所有节点?

5 个答案:

答案 0 :(得分:7)

如果您使用'//Field',那么它就是文档根目录的绝对值。要相对于当前节点进行搜索,只需使用'.//Field'

答案 1 :(得分:1)

尝试使用SelecteSingleNode()

答案 2 :(得分:1)

使用./Field

  • .//意味着后代,其中包括儿童的孩子(等等)。
  • ./意味着指导孩子。

如果XPath以/开头,则它变为相对于文档的根;使其相对于您自己的节点以./启动它。

答案 3 :(得分:0)

你可以像这样使用简单的linq查询:

var techLeads = (from value in element.Descendants ("Manager")
where value.Attribute ("Name").Value == "Mgr1"
select value).Descendants("TechLead");

示例Xml:

<Employees>
 <Manager Name="Mgr1">
  <TechLead Name="TL1" />
  <TechLead Name="TL2" />
 </Manager>
</Employees>

答案 4 :(得分:0)

删除//,否则它会在所有文档中搜索与根节点无关的信息。

node.SelectNodes("Field")