Фильтр Xpath в Java возвращает только результат первого значения повторно

Я здесь новичок, и, короче, у меня есть эта проблема. Я хочу получить все значения Child, которые имеют атрибут "@ name = 'Priority' в виде списка, и я сделал это:

    XPathExpression expr = xpath.compile ("//*[@name='Priority']");
        NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
         System.out.println("Found " + nl.getLength() );
            for(int i = 0; i < nl.getLength(); i++) {
                System.out.println("Priority:" + xpath.compile("//*[@name='Priority']").evaluate(nl.item(i)));
                System.out.println("================= = ");
            }

моя структура XML здесь

  <INSTANCE id = "obj.43200" class = "Car" name = "Car-43200">
        <ATTRIBUTE name = "Position" type = "STRING">NODE x:15.5cm y:7cm w:1.5cm h:1cm index:69</ATTRIBUTE>
        <ATTRIBUTE name = "External tool coupling" type = "STRING" />
        <ATTRIBUTE name = "Direction" type = "ENUMERATION">Horizontal</ATTRIBUTE>
        <ATTRIBUTE name = "Priority" type = "INTEGER">40</ATTRIBUTE>
     </INSTANCE>

но когда я выполняю Java-код в eclips, я получаю следующее:

    Found 9
Priority:40
==================
Priority:40
==================
Priority:40
==================
Priority:40
==================
Priority:40
==================
Priority:40
==================
Priority:40
==================
Priority:40
==================
Priority:40
==================

он дает мне только первый результат в качестве конечного результата для всех остальных 8 результатов фильтрации XPath. Для exmp должно быть так:

     Found 2
Priority:40
==================
Priority:5

и так далее...

Что я мог сделать? Заранее спасибо :)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
43
1

Ответы 1

на основе заданного xml-содержимого и java-кода выведите следующий результат

Found 1
Priority:40
==================

Я понятия не имею о вашем XML-содержимом. пожалуйста, попробуйте с этим

XPathExpression expr = xpath.compile ("//*[@name='Priority']");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
System.out.println("Found " + nl.getLength() );
for(int i = 0; i < nl.getLength(); i++) {
    System.out.println("Priority:" + nl.item(i).getTextContent());
    System.out.println("================= = ");
}

Я не могу проверить это прямо сейчас, но мне нравится логика, я попробую позже, спасибо;)

learner32 11.12.2018 18:29

Другие вопросы по теме