2009-12-11 135 views
1

我們想通過XPath表達式實現對元素的存在檢查。 XPath表達式是在外部定義的。我們嘗試使用System.Xml.XPath中的XPathEvaluate擴展方法,但是當我們嘗試執行以下操作時,它會發出抱怨。從XPath表達式返回布爾值

XDocument d = new XDocument(
       new XElement("test", 
        new XElement("element"), 
        new XElement("element"))); 
bool b = (bool)d.XPathEvaluate("/test/element[exists()]"); 

此功能目前失敗,異常「命名空間管理器或XsltContext需要的。此查詢具有前綴,變量,或用戶定義的函數。」。如果我們嘗試exists(/test/element),我們會得到相同的信息。

我們希望在XPath表達式中表達的其他內容之一是元素的數量,例如, count(/text/element) = 2

測試條件應該是XPath表達式的一部分。

函數調用d.XPathEvaluate("/test/element[last()]")按預期進行評估。

這樣可以使用XPathEvaluate嗎?

[編輯] 是的。

如果不是,那麼.Net框架中是否有其他選擇?

[編輯] 是的。

[編輯] 剩餘的問題:爲什麼exists函數不起作用?

回答

2

經過一些更多的實驗後,我似乎回答了我自己的問題。

當然你可以做count(/test/element) > 0作爲存在檢查。 (我們在看這三個人:-()

bool b = (bool)d.XPathEvaluate("count(/test/element) > 0"); 
4

你有沒有試過的XPath:

boolean(/test/element) 
+0

不是之前,但只是測試它,它的工作原理。 – 2009-12-11 10:24:51

0

剩下的問題:爲什麼不 存在功能工作

您所呼叫的存在()函數不正確。The exists() function needs at least one argument.

而不是在一個謂詞使用它爲您的XPATH表達式,使用XPATH表達式作爲存在()函數參數

bool b = (bool)d.XPathEvaluate("exists(/test/element)"); 
+0

我們已經嘗試過,結果相同。這是在我的問題中提到的。 – 2009-12-13 12:56:45