2010-01-27 73 views
2

在這裏,我有XML:我的XPath有什麼問題?

<root> 
    <field ...>offer</field> 
    <field type="ferrari" ...>car</field> 
    <field ...>company</field> 
    <field ...>whatever</field> 
</root> 

,我想知道«汽車»的«類型»通過提取的元素。我想是這樣的:

/root[field='car']/field (or /root[field='car']) 

已經足夠了,但是當我試圖執行我的C#代碼:

XmlDocument document = new XmlDocument(); 
document.InnerXml = "..."; // xml of above 
XmlNode node = document.DocumentElement.SelectSingleNode("... xpath of above ..."); 

對象«節點»它總是包含的第一個子元素«現場»(中提供)並且在SelectNodes(「... same xpath ...」)的情況下返回所有元素«field»忽略條件。

有什麼問題? XPath錯了?

+0

你的XML似乎倒退。不應該類型=「汽車」和元素的價值是法拉利? – 2010-01-27 18:26:00

+0

那麼我不得不對這種XML做解析器,我不能改變它的結構,因爲這是客戶的定義。但我同意你這樣的結構有點畸形... – Alexian 2010-01-28 14:19:31

回答

2
/root/field[text()='car']/@type 

將帶回表示文本值爲「car」的元素「字段」的屬性「類型」的節點。這個XmlNode的值將是「ferrari」。

/root/field[text()='car'] 

將帶回代表元素「場」(其文本值是「車」),您可以以編程方式獲得的類型屬性的節點:

XmlNode fieldNode = document.DocumentElement.SelectSingleNode(@"/root/field[text()='car']"); 
string type = fieldNode.Attributes["type"].Value; 
//type == "ferrari" 
+0

謝謝你! :)我不知道我必須指定內部內容必須轉向文本! BR! – Alexian 2010-01-27 16:59:36