当前位置:  开发笔记 > 编程语言 > 正文

为什么Java中的XPath表达式会返回太多孩子?

如何解决《为什么Java中的XPath表达式会返回太多孩子?》经验,为你挑选了1个好方法。

我有以下xml文件:



 
  
   p1 
   p2 
  
 

以及获取我的节点参数的xpath代码:

Document doc = ...;
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("/config/a/b");
Object o = expr.evaluate(doc, XPathConstants.NODESET);
NodeList list = (NodeList) o;

但事实证明,节点列表(列表)有5个孩子,包括"\t\n",而不是只有两个.我的代码有问题吗?我怎样才能得到我的两个节点?

谢谢!



1> Eddie..:

选择时/config/a/b/,您将选择所有子项b,其中包括三个文本节点和两个元素.也就是说,鉴于上面的XML并且仅显示有问题的片段:


 p1 
 p2 

第一个孩子是跟随和前面的文本(空白)p1 ....第二个孩子是第一个param元素.第三个孩子是两个param元素之间的文本(空白).等等.XML中不会忽略空格,尽管许多处理XML的形式都忽略它.

你有几个选择:

    更改你的xpath表达式,使它只选择元素节点,如Ted Dziuba所建议的,或者

    循环返回的五个节点,仅选择非文本节点.

你可以这样做:

for (int i = 0; i < nodes.getLength(); i++) {
    if (nodes.item(i).getNodeType() != Node.TEXT_NODE) {
        System.out.println(nodes.item(i).getNodeValue());
    }
}

您可以使用节点类型仅选择元素节点,或删除文本节点.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有