Java 带有 XMLUnit 2 和默认命名空间的 XPath
Java XPath with XMLUnit 2 and Default Namespace
我在使用 XMLUnit 2.0.0 和默认命名空间编写 XPath 时遇到了问题。这是我的样本 xml:
<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("/a/b",
Input.fromString("<a xmlns=\"uri:foo\"><b>value</b></a>").build()));
如何使用 XPathEngine/XPath 使用默认命名空间访问元素?
我找到的答案是在 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()));
我在使用 XMLUnit 2.0.0 和默认命名空间编写 XPath 时遇到了问题。这是我的样本 xml:
<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("/a/b",
Input.fromString("<a xmlns=\"uri:foo\"><b>value</b></a>").build()));
如何使用 XPathEngine/XPath 使用默认命名空间访问元素?
我找到的答案是在 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()));