我有一个简单的示例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());
我得到了Blue,这是我应该的。但是可以说我想要没有ID的卡的颜色0,应该是红色。
所以我将表达式更改为
String expression = String.format("/testCars/cars/color[@id=\"%s\"]",0);
但是现在结果是布莱克。它只是采用第一个节点,尽管我希望它采用没有任何属性的节点。
Xpath是否具有一些特定命令来显式选择不带属性的节点?还是我需要重构xml文件?
谢谢。
最佳答案
要选择没有属性的cars
元素,请使用cars[not(@*)]
。要选择没有cars
属性的@id
元素,请使用cars[not(@id)]
。