2016-03-15 3 views
2

У меня была проблема с записью XPath с использованием XMLUnit 2.0.0 и пространства имен по умолчанию. Вот мой пример XML:Java XPath с XMLUnit 2 и пространство имен по умолчанию

<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())); 
Смежные вопросы