Как правильно перебрать xml с помощью Java?
У меня есть файл XML, начиная с:
<?xml version="1.0"?>
<results>
<result id="0001">
<hometeam>
<name>Dantooine Destroyers</name>
<score>6</score>
</hometeam>
<awayteam>
<name>Wayland Warriors</name>
<score>0</score>
</awayteam>
</result>
<result id="0002">
<hometeam>
<name>Dantooine Destroyers</name>
<score>3</score>
</hometeam>
<awayteam>...
и в файле Java:
if(event.isStartElement()){
if(event.asStartElement().getName().getLocalPart().equals(HOME)){
System.out.println("In hometeam"); // for testing purposes
event = eventReader.nextEvent(); // I expect <name> element
if(event.isStartElement()){ // <------------ FALSE
if(event.asStartElement().getName().getLocalPart().equals(NAME)){....
Я бы ожидал, что это утверждение будет верно для <name>
элемент, но если я вставлю в System.out.println(event.isStartElement())
я получил FALSE
....
Также event.getEventType()
возвращается XMLEvent.CHARACTERS
чего я не понимаю... Кто-нибудь может понять почему?
Не стесняйтесь вносить изменения в теги / заголовки и вопросы, если это необходимо.
2 ответа
Символы означают, что следующая часть XML - это хорошо - символы (в вашем случае - новая строка и отступ) - низкоуровневый анализатор не является квалифицированным, чтобы отбросить его для вас. он доставляет только необработанные события. Ваша работа - правильно обрабатывать структуру.
Этот вызов.nextEvent(), вероятно, приносит пробел между <hometeam>
а также <name>
, Обратите внимание, что в XML все символьные данные между тегами (даже если это пробелы или переводы строк) также доступны из API.
Вы можете проверить это, распечатав элемент.
Обычно вы не видите этот пробел с API на основе DOM (или вы можете легко его игнорировать), но с API, управляемыми событиями (такими как SAX или StAX), вы должны его игнорировать.