2011-04-05 74 views
1

我需要預先評估一個xpath表達式而不知道它的返回值。我不關心節點和NodeSet之間的區別,但我關心NodeSet與String或數字。XPathExpression動態返回值

例如,帶有sumconcat函數的xpath可返回數字或字符串(或布爾值)。具有常規xml路徑的xpath返回一個節點集,可能只有一個節點。

如何才能調用XPathExpression.evaluate()函數(javadoc here)?我不知道QName傳遞給它作爲第二個參數。類XPathConstants包含允許的常量的閉合列表(這些是Node,NodeSet,String,Number和Boolean)。

是否可以指定「all」或「do not care」值,然後檢查返回的對象的類型?

我想也許使用這個函數的重載版本,它總是返回一個字符串。但是,如果xpath表達式旨在返回節點集,我不會看到這將如何工作。

+0

在[DOM Level 3 XPath](http://www.w3.org/TR /DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE) – 2011-04-05 16:02:47

+0

嘿亞歷杭德羅,這是非常有用的輸入。我發現Xalan 2.7.1有這個XPathEvaluatorImpl類,它提供了你提到的功能,所以我可以直接使用它(不通過javax factory api)。如果您將評論添加爲答案,我會接受它。 – Yoni 2011-04-05 18:26:44

+0

你可以回答你自己的問題。最後,您發現爲您的語言實現DOM XPath的XPath引擎。 – 2011-04-05 18:30:28

回答

1

繼Alejandro提示DOM Level 3 XPath後,我發現Xalan 2.7.1已經支持它。

我使用了Xalan的XPathEvaluatorImpl類。它效果很好,我可以指定ANY-TYPE作爲返回值。唯一的缺點是,這個功能沒有暴露在標準的javax api中,至少不是在Java 6中。

0

回覆:獲取一個字符串 - 如果表達式引用一個NodeSet,您將獲得其文本表示。這可能是someling這樣的:

讀爲字符串「thisthat」有或沒有根據配置的空格。沒有嘗試就不會知道。

我個人比較喜歡Dom4J,因爲你負責使用booleanValueOf,numberValueOf,selectNodes,selectSingleNode等方法。代碼變得清晰:它說明你想得到什麼,所以很容易理解。