Как создать объекты DOM, анализирующие XML со Stax
Вопрос
У меня есть некоторые трудности для анализа XML с помощью Stax, чтобы создать объекты org.w3c.dom.document для частей дерева XML.
Бывший.:
u003Croot>
u003Cchildren>
u003Cchild>ребенок 1.u003C/child>
u003Cchild>ребенок 2.u003C/child>
u003Cchild>ребенок 3u003C/child>
u003C/children>
u003C/root>
=> Я хотел бы создать 3 DOM объектов для каждогоu003Cchild> узел.
Я пытался сделать это, используя Staxmate и Domconverter, но у меня проблема ...
Мой тестовый проект зависит только от:
- Stax2-API-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)
Не могли бы вы мне помочь, пожалуйста ?
С наилучшими пожеланиями, Гийом ЛЕФЕБВР
Решение
Новый релиз Staxmate 2.0.1 (доступно в http://wiki.fasterxml.com/staxmateownload) решил эту проблему.
Спасибо, Стакман!
Другие советы
Проверьте это: http://jira.codehaus.org/browse/staxmate-39.... :-)