Java XPath - 选择所有节点不能使用命名空间

时间:2016-06-14 06:11:33

标签: java xml xpath

我想从给定的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 元素?

0 个答案:

没有答案