2011-08-22 50 views
0

我想在给定的XmlNode内部找到所有的<Field />节点(可以任意嵌套)。用于选择所有节点的XPath表达式

如果做这样的事情:

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

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

XPath应该如何工作?我查看了一些文档,看起来应该将这个查询范围限定在它所调用的任何节点上。

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

+1

您是否考虑过使用LINQ to XML?使用XPath比使用XPath更容易。 – Zebi

回答

7

如果您使用'//Field'它绝对从文档的根目录。要搜索相对于当前节点,只需使用'.//Field'

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> 
1

使用./Field

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

如果XPath以/开头,它将相对于文档的根;使其相对于您自己的节点以./开始。

0

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

node.SelectNodes("Field") 
相关问题