我使用爪哇元素標籤的序列(爪哇/撒克遜)與撒克遜HE 9.4所以我可以有的XPath 2.0支持。的XPath越來越
給出下面的XML實例文檔:
<entities>
<entity>
<person>
James
</person>
</entity>
<entity>
<legalEntity>
ACME
</legalEntity>
</entity>
</entities>
我知道我可以做一個拿到實體元素標籤的列表:
XPathExpression expr = xpath.compile("/entities/entity/*");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0 ; i < nodes.getLength() ; i++)
System.out.println("element name = "+ nodes.item(i).getNodeName());
上面會輸出:
element name = person
element name = legalEntity
預期...。 XPath表達式本身,呼叫到getNodeName
方法:
然而,邏輯在兩個地方傳播。我想要的是一個XPath表達式,它將返回一個通用的結果列表,我可以通過調用一些通用方法(而不是getNodeName
)來進行迭代。
這樣一來,所有的邏輯可以駐留在XPath表達式本身和我的代碼可能只是保持的XPath字符串的文件並在運行時處理它們得到的結果的列表。
試圖XPath表達式/entities/entity/*/name()
僅取第一個值(人):
XPathExpression expr = xpath.compile("/entities/entity/*/name()");
System.out.println("element name = "+expr.evaluate(doc));
...並在運行時代碼休息,如果我嘗試強制轉換到NodeList
:
XPathExpression expr = xpath.compile("/entities/entity/*/name()");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0 ; i < nodes.getLength() ; i++) {
...
(以上失敗:net.sf.saxon.trans.XPathException: Cannot convert XPath value to Java object: required class is org.w3c.dom.NodeList; supplied value has type xs:string
)
那麼有沒有一種通用的方式來獲得XPath表達式求列出的結果(這可能是元素標籤,元素值,屬性值和標籤等),以便遍歷這些結果的代碼是在所有情況下相同,不必調用之間分化爲getNodeName()
或getNodeValue()
?
據:http://www.saxonica.com/feature-matrix.html的s9api也可用於自由撒克遜HE這就是我使用的,但我似乎無法找到任何「官方」 ,使用該API的最新源代碼示例用於最新的Saxon版本(9。5) –
您可以在saxon-resources下載中找到示例程序:請參閱http://sourceforge.net/projects/saxon/files/Saxon-HE/9.5/saxon-resources9-5.zip/download –