Estou precisando parsear uma porrada de XMLs que seguem um DTDzinho bem básico, e estou seriamente pensando em usar o Jakarta Commons-Digester pra isso, mas antes de sair me sujando de código, eu queria saber se tem mais alguma alternativa boa por aí, já que as únicas que eu considerei foram usar SAX e DOM (do Xerces). Qual a sua maneira favorita de ler XML?
Sei que você não gosta muito dele, Carlos, mas eu uso JDOM. Aliás, mesmo que seja muito mais “caro” trabalhar com DOM (já que a árvore inteira vai para a memória), é muito mais prático. Trabalhar com verificações usando DTD com JDOM também é muito fácil.
Paulo_Silveira
eu uso sax. consome 1k de memoria :). porem eh meios acal pq vc tem de ficar guardando o path q vc ta neh?
nucna usei DOM, porque como o daniel disse, eh tudo pro heap!
ja o JDOM, eu iamginava q ele colocasse boa parte da arvore na cabeca na hora.
cv1
No meu caso, parsear usando uma árvore (DOM) ou eventos (SAX) não é problema, já que os arquivos são pequenos, e o que eu queria mesmo era programar o mínimo possível… idéias?
Daniel_Quirino_Olive
Já que a idéia é programar o mínimo possível, então use JDOM (já que não tem problema com uso de memória). No site da Oracle Magazine (http://otn.oracle.com/oramag) tem um tutorial bem interessante de como usar o JDOM.
[/url]
Rafael_Steil
Bom, dependendo do caso as vezes eh ate mais simples usar SAX ao inves de DOM. Por exemplo, eh um processamento simples, num documento sem muitas variacoes de tags… SAX acaba sendo rapido de implementar e muito simples de entender tambem ( ja que fica algo mais “procedural” ).
Rafael
louds
se o commons-digester resolve todo teu problema, nem se aventure em usar sax/dom, eh bem mais simples e pratico que as apis genericas.
ricardolecheta
estava procurando no forum sobre XML e encontrei esta Thread
seguinte pessoal, vcs estão falando de fazer o parser no XML, agora a respeito de criar ou alterar o XML?
eu gostei do JDom dá de fazer as duas coisas com ele, ler gravar…
mas o Digester eu só consegui ler… acho que ele não gera XML né?
que outra opção eu tenho para criar um xml ?
thanks
douglasfs
“cv”:
Estou precisando parsear uma porrada de XMLs que seguem um DTDzinho bem básico, e estou seriamente pensando em usar o Jakarta Commons-Digester pra isso, mas antes de sair me sujando de código, eu queria saber se tem mais alguma alternativa boa por aí, já que as únicas que eu considerei foram usar SAX e DOM (do Xerces). Qual a sua maneira favorita de ler XML?
[]'s
-cv
Minha maneira favorita de ler XML é através do JDOM, pois deixa o código bem limpo
louds
O commons-digester é muito util quando voce quer mapear um xml para objetos já existentes do teu sistema ou realizar diretamente o processamento dele sem criar primeiro uma representação intermediaria.
Porem se voce ta saindo do zero, uma excelente opção é o castor, voce alimenta com um Xml Schema e ele te produz um jogo de classes que realizam parsing, validação e serialização com voce escrevendo 1 linha para cada operação. Ele gera um JavaBean por tipo do schema.
renzonuccitelli
Sei que o Tópico é antigo, mas caso alguém o leia, tente usar o framework JColtrane. Ele usa o SAX por baixo (portanto não consome tanta memória como o JDOM) e oferece algumas facilidade pra não ter que programar tudo na mão. Basta usar anotações e pra XML simples vc não tem praticamente nenhum trabalho.
particularmente gosto do Xstream. Acho que facilita muito o trabalho.
abraços.
L
lucas_sa
6 anos depois…
Vinci
importjava.io.FileNotFoundException;importjava.io.IOException;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.*;importjava.io.*;importjava.util.*;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.DocumentException;importorg.dom4j.io.SAXReader;importorg.dom4j.io.DOMReader;publicclassLoadWithDOM{publicstaticvoidmain(String[]args){try{LoadWithDOMlWithDOM=newLoadWithDOM();org.w3c.dom.Documentdoc=lWithDOM.loadWithDOM();org.dom4j.DocumentocDOM=lWithDOM.loadIntoDOM4J(doc);lWithDOM.printElements(ocDOM);}catch(Exceptione){e.printStackTrace();}}publicorg.w3c.dom.DocumentloadWithDOM()throwsException{//Instantiate a DocumentBuilderFactory.DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance();// And setNamespaceAware, which is required when parsing xsl filesdFactory.setNamespaceAware(true);//Use the DocumentBuilderFactory to create a DocumentBuilder.DocumentBuilderdBuilder=dFactory.newDocumentBuilder();//Use the DocumentBuilder to parse the XML input.org.w3c.dom.DocumentxmlDoc=dBuilder.parse("test.xml");// colocar o xml desejado aquireturnxmlDoc;}publicorg.dom4j.DocumentloadIntoDOM4J(org.w3c.dom.Documentdoc)throwsDocumentException,Exception{DOMReaderreader=newDOMReader();org.dom4j.Documentdocument=reader.read(doc);returndocument;}publicvoidprintElements(org.dom4j.Documentdocument)throwsDocumentException{Elementroot=document.getRootElement();// iterate through child elements of rootfor(Iteratori=root.elementIterator();i.hasNext();){Elementelement=(Element)i.next();// do somethingSystem.out.println("Element Name:"+element.getQualifiedName());System.out.println("Element Value:"+element.getText());}}}
// coloquei o dom4j-1.6.jar na lib e ja era hehehe (peguei este código não lembro onde)