2011-08-22 66 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") 
相關問題