Как получить значение и путь из файла XML? - PullRequest
0 голосов
/ 25 января 2019

Я использую XMLDog для чтения значений из файла XML. Проблема в том, что я продолжаю получать нулевые значения.

Это XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
  <person>
    <name>John Doe</name>
    <age>30</age>
  </person>
  <person>
    <name>Jane Doe</name>
    <age>30</age>
  </person>
</persons>

И код, который я использую:

final DefaultNamespaceContext nsContext = new DefaultNamespaceContext();
final XMLDog dog = new XMLDog(nsContext);

final Expression expression = dog.addXPath("/persons/person/name");
final XPathResults result = dog.sniff(new InputSource("/mnt/data-disk/persons.xml"));

final List<NodeItem> list = (List<NodeItem>)result.getResult(expression);
list.forEach(item -> System.out.println("Path: " + item.location + ", value: " + item.value));

Вот что я получаю:

Path: /persons[1]/person[1]/name[1], value: null
Path: /persons[1]/person[2]/name[1], value: null

Мне нужна помощь, чтобы выяснить, почему я получаю null для значения.

В моем проекте мне нужен точный путь и значение. Есть ли другой способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Отсутствует XPath: /text().Я изменил это на это: /persons/person/name/text().Вывод в порядке:

Path: /persons[1]/person[1]/name[1]/text()[1], value: John Doe
Path: /persons[1]/person[2]/name[1]/text()[1], value: Jane Doe
0 голосов
/ 25 января 2019

Из документации:

Результаты DOM

По умолчанию XMLDog не создает dom-узлы для результатов. Вы можете настроить для результатов DOM следующим образом:

import package jlibs.xml.sax.dog.sniff.Event;

Event event = dog.createEvent();
results = new XPathResults(event);
event.setListener(results);
event.setXMLBuilder(new DOMBuilder());
dog.sniff(event, new InputSource("note.xml"));

List<NodeItem> items = (List<NodeItem>)results.getResult(xpath1)

Возможно ли, что вы пытаетесь перебрать DOM без создания DOM?

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