這感覺就像是一個noob問題。getNodeName與XML節點匹配,但XPath無法找到它
我在看一堆操縱XML DOM的Java代碼。 (這些類股票org.w3c.dom.Document
和javax.xml.xpath.XPath
與JDK 7,使得船)它有一噸的看起來像這樣的地方:
String expr = "/fixed/path/through/the/hierarchy";
// actual code reuses factory instances, etc
XPath xpath = XPathFactory.newInstance().newXPath();
Node topNode = someDocumentInstance.getFirstChild();
Node node = (Node) xpath.evaluate (expr, topNode, XPathConstants.NODE);
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child.getNodeName().equalsIgnoreCase("somePrefix:someTag")) {
// "return child;" or otherwise break out of the loop
}
}
而且它所有的作品。但是這個循環看起來很乏味。如果我們已經在使用XPath來獲取節點,那麼爲什麼然後迭代該節點的孩子尋找一個已知標籤?
所以我試圖重寫一個節來直接獲取子節點。但是使用查詢
String expr = "/fixed/path/through/the/hierarchy/somePrefix:someTag";
永遠不會匹配任何東西。我嘗試過要求XPathConstants.NODESET
或.STRING
,但仍然沒有結果。 (應該只有這些節點之一無論如何。)
我覺得我在這裏錯過了一些極其明顯的東西,但我無法弄清楚爲什麼完整的查詢失敗,當查詢爲父加通過兒童作品的手動循環。當我使用類似這樣的查詢時,XPath是否會測試一個超出getNodeName()
的節點的質量?
的唯一理論,我想出的是,它是與XML命名空間,這是不是在這個項目中使用。 (實際上,有上有評論稱的DocumentBuilderFactory實例.setNamespaceAware(false)
一個叫「離開這個關閉或事事處處打破」。)
啊哈!沒有意識到XPath的問題,謝謝澄清! –