Как создавать Dom-объекты, анализирующие XML с помощью Stax
У меня есть некоторые трудности с анализом XML с использованием Stax для создания объектов org.w3c.dom.Document для частей дерева XML.
Напр.:
<Корень>
<дети>
<ребенок> ребенок 1 ребенок>
<ребенок> ребенок 2 ребенок>
<ребенок> ребенок 3 ребенок>
Дети>
Корень>
=> Я хотел бы создать 3 объекта DOM для каждого узла
Я пытался сделать это с помощью Staxmate и DomConverter, но у меня проблема...
Мой тестовый проект зависит только от:
- stax2-апи-3.0.3.jar
- staxmate-2.0.0.jar
- JDK 1.6.0_21
2 теста:
- Тест 1, который отлично работает
FileInputStream in = new FileInputStream("demo.xml");
XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(in);
Document doc = new DOMConverter().buildDocument(sr);
in.close();
- Тест 2, который выдает исключение HIERARCHY_REQUEST_ERR:
FileInputStream in = new FileInputStream("demo.xml");
XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(in);
while (sr.hasNext()) {
sr.next();
switch (sr.getEventType()) {
case XMLStreamReader.START_ELEMENT:
Document doc = new DOMConverter().buildDocument(sr);
}
}
in.close();
org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted.
at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:391)
at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235)
at org.codehaus.staxmate.dom.DOMConverter._build(DOMConverter.java:292)
at org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:171)
at org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:152)
at org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:131)
at com.staxmatetest.Main.main(Main.java:22)
Не могли бы вы мне помочь, пожалуйста?
С наилучшими пожеланиями, Гийом Лефевр
2 ответа
Решение
Новая версия Staxmate 2.0.1 (доступна по адресу http://wiki.fasterxml.com/StaxMateDownload) решает эту проблему.
Спасибо StaxMan!
Проверьте это: http://jira.codehaus.org/browse/STAXMATE-39...:-)