2016-03-15 88 views
2

我在使用XMLUnit 2.0.0和默認命名空間編寫XPath時遇到了問題。這裏是我的示例XML:帶有XMLUnit 2和默認命名空間的Java XPath

<a xmlns="uri:foo"> 
    <b>value</b> 
</a> 

我無法訪問與以下XMLUnit測試的XPath代碼的任何元素:

XPathEngine engine = new JAXPXPathEngine(); 
engine.setNamespaceContext(new HashMap<String, String>(1) {{ 
    put(DEFAULT_NS_PREFIX, "uri:foo"); 
}}); 
assertEquals("value", engine.evaluate("https://stackoverflow.com/a/b", 
      Input.fromString("<a xmlns=\"uri:foo\"><b>value</b></a>").build())); 

如何訪問使用XPathEngine/XPath的使用默認命名空間的元素?

回答

1

我發現的答案是在XPath中的元素前加一個':'。

"/:a/:b" 

這解決了我的問題。總之,我做了以下事情:

XPathEngine engine = new JAXPXPathEngine(); 
engine.setNamespaceContext(new HashMap<String, String>(1) {{ 
    put(DEFAULT_NS_PREFIX, "uri:foo"); 
}}); 
assertEquals("value", engine.evaluate("/:a/:b", 
      Input.fromString("<a xmlns=\"uri:foo\"><b>value</b></a>").build())); 
相關問題