java xpath должен показывать подузлы только без атрибутов, но показывает все - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть простой пример xml file:

<?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, чтобы получить цвет 0 автомобиля 1:

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());

И я получил Синий, как и должен. Но допустим, я хочу, чтобы цвет 0 карты был без идентификатора, он должен быть красным.

Поэтому я изменил выражение на

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

Но теперь результат черный. Это просто берет первый узел, хотя я хочу, чтобы он взял тот без каких-либо атрибутов на нем.

Есть ли у Xpath какая-то конкретная c команда для явного выбора узлов без атрибута? Или мне нужно восстановить xml файл?

Thx.

1 Ответ

1 голос
/ 18 февраля 2020

Чтобы выбрать элемент cars без атрибутов, используйте cars[not(@*)]. Чтобы выбрать элемент cars без атрибута @id, используйте cars[not(@id)].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...