Como criar objetos DOM analisando um XML com Stax
Pergunta
Tenho algumas dificuldades para analisar um XML usando Stax para criar objetos org.w3c.dom.document para partes da árvore XML.
Ex.:
u003Croot>
u003Cchildren>
u003Cchild>Criança 1u003C/child>
u003Cchild>Criança 2u003C/child>
u003Cchild>Criança 3u003C/child>
u003C/children>
u003C/root>
=> Eu gostaria de criar 3 objetos DOM para cadau003Cchild> nó.
Eu tentei fazer isso usando Staxmate e DomConverter, mas tenho um problema ...
Meu projeto de teste depende apenas de:
- Stax2-api-3.0.3.Jar
- Staxmate-2.0.0.jar
- JDK 1.6.0_21
2 testes:
- Teste 1 que funciona perfeitamente
FileInputStream in = new FileInputStream("demo.xml");
XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(in);
Document doc = new DOMConverter().buildDocument(sr);
in.close();
- Teste 2 que lança uma exceção hierarquia_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)
Você poderia me ajudar por favor ?
Atenciosamente, Guillaume Lefebvre
Solução
Novo Staxmate Release 2.0.1 (disponível em http://wiki.fasterxml.com/staxmatetownload) resolveu esse problema.
Obrigado Staxman!
Outras dicas
Veja isso: http://jira.codehaus.org/browse/Staxmate-39... :-)