我想从给定的XML中选择所有元素(在我的例子中 // ab )。但它没有选择任何东西(匹配变量包含空列表):
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//ab");
NodeList matches = (NodeList) expr.evaluate(new InputSource(new ByteArrayInputStream(
("<x:xml xmlns:x=\"yyy\">"+
"<x:ab>123</x:ab>"+
"</x:xml>").getBytes())), XPathConstants.NODESET);
if (matches != null)
{
for (int i = 0; i < matches.getLength(); i++)
{
Node node = (Node) matches.item(i);
System.out.println(node.getNodeName());
System.out.println(node.getNodeValue());
}
}
有趣的是,当将xpath更改为: * // ab 时,它会选择 ab 元素。
当我从xml中删除命名空间时,xpath // ab 会选择 ab 元素。
当我将namespaceContext添加到xpath对象并将命名空间添加到xpath查询时: // x:ab ,然后它确实选择 ab 元素。
我应该如何更改代码,以便在不更改查询的情况下获得 ab 元素?