Загрузка Java-объекта при разборе xml с использованием SAX xerces - PullRequest
0 голосов
/ 06 декабря 2011

Если мой xml выглядит так:

<root version="1.1">
  <node number="1">
    <url>http://....</url>
  </node>
  <url>http://...</url>
</root>

Теперь в моем событии endElement я смотрю, начинается ли элемент xml с 'url', , но как узнать, когда элемент url является элементом url внутри элемента node, а когда нет?

public void endElement(String uri, String localName, String qName, Attributes attributes) {
  if(qName.equals("url")) {
    someObject.setUrl(characters);
  }
}

1 Ответ

2 голосов
/ 06 декабря 2011

Одним из способов является отслеживание «видимых» элементов либо путем сохранения стека имен элементов, либо с помощью флага, который указывает, что вы находитесь внутри поддерева.

Первый способ: в startElement поместите имя элемента в стек, затем в endElement вытолкните имя из стека. Когда вы видите «URL» в endElement, проверьте, находится ли «узел» в стеке.

Другой способ: в startElement установить nodeElementSeen = true, затем в endElement установить nodeElementSeen = false. Когда вы видите «url» в endElement, проверьте, если nodeElementSeen = true.

...