我的XML下面包含默认命名空间
<?xml version="1.0"?>
<catalog xmlns="http://www.edankert.com/examples/">
<cd>
<artist>Stoat</artist>
<title>Future come and get me</title>
</cd>
<cd>
<artist>Sufjan Stevens</artist>
<title>Illinois</title>
</cd>
<cd>
<artist>The White Stripes</artist>
<title>Get behind me satan</title>
</cd>
</catalog>
我正在运行以下代码,希望得到一些结果
Element rootElem = new Builder().build(xml).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("", "http://www.edankert.com/examples/");
Nodes matchedNodes = rootElem.query("cd/artist", xc);
System.out.println(matchedNodes.size());
但是大小总是为0。
我经历了
期待任何帮助。
答案 0 :(得分:4)
XPath中的未加标签的名称始终表示“无名称空间” - 它们不尊重默认的名称空间声明。您需要使用前缀
Element rootElem = new Builder().build(xml).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("ex", "http://www.edankert.com/examples/");
Nodes matchedNodes = rootElem.query("ex:cd/ex:artist", xc);
System.out.println(matchedNodes.size());
XPath表达式使用原始文档没有的前缀并不重要,只要绑定到XPath名称空间上下文中的前缀的名称空间URI与绑定的URI相同即可。文档中的xmlns
。