我想在給定的XmlNode內部找到所有的<Field />
節點(可以任意嵌套)。用於選擇所有節點的XPath表達式
如果做這樣的事情:
foreach(XmlNode n in node.SelectNodes('//Field'))...
這將返回node
下整個文檔中的所有節點,不是所有的節點。
XPath應該如何工作?我查看了一些文檔,看起來應該將這個查詢範圍限定在它所調用的任何節點上。
是否有任何其他技術來選擇具有特定節點下的給定名稱的所有節點?
我想在給定的XmlNode內部找到所有的<Field />
節點(可以任意嵌套)。用於選擇所有節點的XPath表達式
如果做這樣的事情:
foreach(XmlNode n in node.SelectNodes('//Field'))...
這將返回node
下整個文檔中的所有節點,不是所有的節點。
XPath應該如何工作?我查看了一些文檔,看起來應該將這個查詢範圍限定在它所調用的任何節點上。
是否有任何其他技術來選擇具有特定節點下的給定名稱的所有節點?
如果您使用'//Field'
它絕對從文檔的根目錄。要搜索相對於當前節點,只需使用'.//Field'
。
嘗試使用SelecteSingleNode()
您可以使用簡單的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>
使用./Field
。
.//
意味着後代,其中包括兒童的孩子(等等)。./
指直接的孩子。如果XPath以/
開頭,它將相對於文檔的根;使其相對於您自己的節點以./
開始。
刪除//
,否則它會在所有文檔中無關地搜索根節點。
node.SelectNodes("Field")
您是否考慮過使用LINQ to XML?使用XPath比使用XPath更容易。 – Zebi