2010-11-13 21 views
1

我想選擇所有具有相同屬性的節點,我得到了標題中的錯誤。未處理的異常:System.Xml.XPath.XPathException:表達式必須評估節點集

我的Xpath字符串看起來像//@[id=****],任何人都知道什麼是錯的?

+0

沒有看到XML文檔(或者至少是相關的部分)並且知道你想要選擇什麼,我們就不可能知道。 – Oded 2010-11-13 09:49:17

+1

獲得解決方案。看起來像我們可以使用// @ id,但選擇特定的節點,如id = 7,我必須使用類似於// node [@ id = 7] – user496949 2010-11-13 09:51:57

+0

好問題,+1。請參閱我的答案,詳細討論XPath表達式和幾種解決方案的問題。 – 2010-11-13 17:47:02

回答

4

你的XPath表達式也許應該是:

//*[@id='something'] 

這意味着匹配其id屬性等於something所有元素,文檔中的任何地方。

編輯:如果你想id屬性節點本身,而不是他們的父元素,你可以使用:

//*[@id='something']/@id 

甚至更​​好,因爲@Dimitre Novatchev建議:

//@id[. = 'something'] 
+0

你是對的,謝謝!想知道爲什麼我們可以使用// @ id而沒有明星。 – user496949 2010-11-13 09:53:21

+0

@ user496949,'// @ id'將匹配'id'屬性節點本身而不是它們的父元素。 – 2010-11-13 09:54:51

+0

好的。我可以使用XPath獲取id = 7的某些屬性節點嗎? – user496949 2010-11-13 09:59:27

0

我試圖選擇所有節點與 屬性相等的東西,我得到 標題中的錯誤。

我的Xpath字符串看起來像 //@[id=****],有誰知道 是什麼錯?

很多問題,這個表達式:

0.1。 //@[some-condition]謂詞只能應用於選定的節點,但//@不會選擇任何節點。 @attribute::的縮寫,這是一個未完成的節點測試。它在這裏缺少節點類型或節點名稱。

什麼是正確的是://@*[some-condition]//@attrName[some-condition]

0.2。 id=****在語法上無效,除非* *是一個有效的XPath表達式本身。我的猜測是,你想要獲得所有具有某個已知字面值的屬性值。在任何這種情況下,使用的語法是id='someLiteral - 請注意包圍文字值的單引號(它們也可以是雙引號)。

//*[@id='something'] 

這將選擇XML文檔中具有屬性id與值'something'所有元素。

//@id[. = 'something'] 

這將選擇XML文檔,其值是'something'名爲id所有屬性。

//@*[. = 'something'] 

這將選擇XML文檔中的所有屬性(無論其名稱),其值是'something'

+0

+1對於正確的'// @ id [。 ='something']'表達式和語法錯誤的解釋。 – 2010-11-14 20:47:15

相關問題