gpt4 book ai didi

java xpath 应该只显示没有属性的子节点,但显示所有

转载 作者:行者123 更新时间:2023-12-02 08:59:19 25 4
gpt4 key购买 nike

我有一个简单的示例 xml 文件:

<?xml version="1.0" ?>
<testCars>
<cars id="0">
<color id="0">Black</color>
<color id="1">Orange</color>
</cars>
<cars id="1">
<color id="0">Blue</color>
<color id="1">Grey</color>
</cars>
<cars>
<color id="0>">Red</color>
<color id="1>">Green</color>
</cars>
</testCars>

首先,我使用 DocumentBuilder 来解析该文件,然后使用 xpath 来获取我想要的东西。我将使用表达式和 xpath 来获取汽车 1 的颜色 0:

String expression = String.format("/testCars/cars[@id=\"%s\"]/color[@id=\"%s\"]",1,0);
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
System.out.println(nodeList.item(0).getTextContent());

我得到了蓝色,这是我应该得到的。但是假设我想要一张没有 ID 的卡片的颜色 0,它应该是红色。

所以我将表达式更改为

String expression = String.format("/testCars/cars/color[@id=\"%s\"]",0);

但现在的结果是黑色。它只获取第一个节点,尽管我希望它获取没有任何属性的节点。

Xpath 是否有一些特定的命令来显式选择没有属性的节点?或者我需要重构xml文件吗?

谢谢。

最佳答案

要选择不带属性的 cars 元素,请使用 cars[not(@*)]。要选择不带 @id 属性的 cars 元素,请使用 cars[not(@id)]

关于java xpath 应该只显示没有属性的子节点,但显示所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60285743/

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