Melhor analisador de XML para Java [fechado]

Preciso de ler em smallish (poucos MB no máximo, codificados em UTF-8) ficheiros XML, procurar vários elementos e atributos, talvez modificar alguns e escrever o XML de novo para o disco (de preferência com formatação agradável e indentada).

Qual seria o melhor analisador XML para as minhas necessidades? Há muito por onde escolher. Alguns que conheço são:

e, claro, o do JDK (estou a usar o Java 6). Conheço o Xerces, mas acho-o desajeitado.

recomendações?

Author: Elliot Chance, 2008-12-17

8 answers

Se a velocidade e a memória não são problemas, o dom4j é uma boa opção. Se você precisa de Velocidade, usar um analisador StAX como Woodstox é o caminho certo, mas você tem que escrever mais código para fazer as coisas e você tem que se acostumar a processar XML em fluxos.

 78
Author: zehrer, 2013-12-24 08:57:33
Eu acho que você não deve considerar nenhuma implementação específica do analisador. a API Java para processamento de XML permite-lhe usar qualquer implementação de analisador Conforme de uma forma padrão. O código deve ser muito mais portátil, e quando você percebe que um analisador específico cresceu muito velho, você pode 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 uma forma padrão:
  • saxofone Esta é a API mais simples. Você lê o XML definindo uma classe de manipulador que recebe os dados dentro dos elementos/atributos quando o XML é processado de uma forma serial. É mais rápido e simples se você só planeja ler alguns atributos / elementos e / ou escrever alguns valores de volta (seu caso).
  • DOM este método cria uma árvore de objectos que lhe permite modificá-la/acedê-la aleatoriamente, para que seja melhor para manipulação e manipulação complexas de XML.
  • StAX Isto está no meio de o caminho entre SAX e DOM. Você só escreve código para puxar os dados do analisador que você está interessado quando ele é processado.

Esquecer APIs proprietárias como o JDOM ou Apache queridos (i.e. Apache Xerces XMLSerializer) porque vai amarrá-lo a uma implementação específica, que pode evoluir no tempo ou perder a compatibilidade com versões anteriores, que vai fazer você mudar o seu código no futuro, quando você deseja atualizar para uma nova versão do JDOM ou qualquer que seja o analisador utiliza. Se ficar para a API padrão Java (usando fábricas e interfaces) o seu código será muito mais modular e sustentável.

Não há necessidade de dizer que todos (Eu não verifiquei todos, mas tenho quase certeza) dos parsers propostos cumprem uma implementação JAXP então tecnicamente você pode usar todos, não importa qual.
 246
Author: Fernando Miguélez, 2014-04-21 09:21:24
Aqui está uma bela comparação em DOM, SAX, StAX & TrAX. (Fonte: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )

Característica StAX sax DOM TrAX

Tipo de API puxar, enviar para streaming, enviar para a árvore de memória XSLT Regra

Facilidade de Utilização elevada                    Média Elevada

Capacidade XPath Não Não Não Sim Sim

CPU & Memória O Bem Bom varia

Apenas Para A Frente Sim Sim Não Não

Ler XML Sim                    Sim Sim Sim Sim

Escrever XML Sim Não Sim sim

CRUD {[8] } Não Não Não Sim não

 127
Author: Kadir, 2011-04-14 15:35:04

XML simples http://simple.sourceforge.net/ é muito fácil para (de)objectos em série.

 8
Author: asdf, 2011-07-23 19:07:32

Para além do SAX e DOM, existe uma análise de STaX disponível usando o XMLStreamReader que é um analisador de tracção xml.

 4
Author: , 2008-12-18 01:32:15

Descobri que o dom4j é a ferramenta para trabalhar com o XML. Especialmente em comparação com o Xerces.

 3
Author: Brian Matthews, 2013-12-24 09:04:57

Eu não recomendaria isso é que você tem um monte de" pensar " no seu aplicativo, mas usando XSLT poderia ser melhor (e potencialmente mais rápido com a compilação XSLT-to-bytecode) do que a manipulação Java.

 2
Author: , 2008-12-18 01:42:47

Se você se importa menos com o desempenho, Eu sou um grande fã do Apache Digester, uma vez que ele essencialmente permite mapear diretamente de XML para Java Beans.

Caso contrário, você tem que primeiro analisar, e então construir seus objetos.
 1
Author: Uri, 2008-12-18 01:33:36