gpt4 book ai didi

java - 为什么我在 Java 中的 XPath 表达式返回太多子项?

转载 作者:行者123 更新时间:2023-11-29 09:46:39 24 4
gpt4 key购买 nike

我有以下 xml 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<config>
<a>
<b>
<param>p1</param>
<param>p2</param>
</b>
</a>
</config>

和获取节点参数的 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;

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

谢谢!

最佳答案

当您选择 /config/a/b/ 时,您正在选择 b所有 子级,其中包括三个文本节点和两个元素。也就是说,给定上面的 XML 并且只显示有问题的片段:

<b>
<param>p1</param>
<param>p2</param>
</b>

第一个 child 是 <b> 之后的文本(空白)和之前的 <param>p1 ... .老二是老大param元素。第三个 child 是两个之间的文本(空白)param元素。等等。 XML 中不会忽略空格,尽管许多处理 XML 的形式都会忽略它。

你有几个选择:

  1. 按照 Ted Dziuba 的建议,更改您的 xpath 表达式,使其仅选择元素节点,或者
  2. 遍历返回的五个节点,只选择非文本节点。

你可以这样做:

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

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

关于java - 为什么我在 Java 中的 XPath 表达式返回太多子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com