Eu preciso ler arquivos XML pequenos (no máximo, alguns MB, codificados em UTF-8), vasculhar vários elementos e atributos, talvez modificar alguns e gravar o XML novamente em disco (de preferência com formatação agradável e recuada) .
Qual seria o melhor analisador de XML para minhas necessidades? Há muito por onde escolher. Alguns dos quais estou ciente são:
E, claro, o do JDK (estou usando Java 6). Estou familiarizado com o Xerces, mas acho desajeitado.
Recomendações?
Respostas:
Se velocidade e memória não forem problema, dom4j é uma opção muito boa. Se você precisar de velocidade, o uso de um analisador StAX como o Woodstox é o caminho certo, mas você precisa escrever mais código para fazer as coisas e se acostumar a processar XML em fluxos.
fonte
Eu acho que você não deve considerar nenhuma implementação específica do analisador. A API Java para processamento XML permite usar qualquer implementação de analisador em conformidade de maneira padrão. O código deve ser muito mais portátil e, quando você perceber que um analisador específico ficou muito antigo, poderá substituí-lo por outro sem alterar uma linha do seu código (se você fizer isso corretamente).
Basicamente, existem três maneiras de lidar com XML de maneira padrão:
Esqueça as APIs proprietárias, como JDOM ou Apache (por exemplo, Apache Xerces XMLSerializer ), porque o vinculará a uma implementação específica que pode evoluir no tempo ou perder a compatibilidade com versões anteriores, o que fará com que você altere seu código no futuro quando desejar atualizar para uma nova versão do JDOM ou qualquer analisador usado. Se você aderir à API padrão Java (usando fábricas e interfaces), seu código será muito mais modular e sustentável.
Não há necessidade de dizer que todos (não verifiquei todos, mas tenho quase certeza) dos analisadores propostos estão em conformidade com uma implementação JAXP, para que tecnicamente você possa usar tudo, não importa qual.
fonte
Aqui está uma boa comparação sobre DOM, SAX, StAX e TrAX (Fonte: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
Tipo de API Pull, streaming Push, streaming Na árvore de memória Regra XSLT
Facilidade de uso Alto Médio Alto Médio
Capacidade XPath Não Não Sim Sim
CPU e memória Bom Bom Varia Varia
Encaminhar apenas Sim Sim Não Não
Leia XML Sim Sim Sim Sim
Escreva XML Sim Não Sim Sim
CRUD Não Não Sim Não
fonte
O XML simples http://simple.sourceforge.net/ é muito fácil para (des) serializar objetos.
fonte
Além do SAX e do DOM, há a análise STaX disponível usando XMLStreamReader, que é um analisador pull de XML.
fonte
Eu descobri que dom4j é a ferramenta para trabalhar com XML. Especialmente comparado ao Xerces.
fonte
Eu não recomendaria isso: você tem muito "pensamento" em seu aplicativo, mas o uso do XSLT poderia ser melhor (e potencialmente mais rápido com a compilação de XSLT para bytecode) do que a manipulação Java.
fonte
Se você se preocupa menos com o desempenho, sou um grande fã do Apache Digester, pois ele essencialmente permite mapear diretamente do XML para o Java Beans.
Caso contrário, você deve primeiro analisar e depois construir seus objetos.
fonte