1) DOM (analisador JAXP Crimson)
DOM é o padrão oficial do W3C para representar documentos XML de forma independente de plataforma e linguagem. DOM é uma coleção de nós ou informações organizadas em uma estrutura hierárquica. Essa hierarquia permite que os desenvolvedores pesquisem informações específicas na árvore. A análise dessa estrutura normalmente requer o carregamento de todo o documento e a construção da hierarquia antes que qualquer trabalho possa ser realizado. Por ser baseado na hierarquia de informações, o DOM é considerado baseado em árvore ou em objeto. O DOM e o processamento baseado em árvore em geral têm várias vantagens. Primeiro, como a árvore é persistente na memória, ela pode ser modificada para que a aplicação possa fazer alterações nos dados e nas estruturas. Ele também permite a navegação para cima e para baixo na árvore a qualquer momento, em vez de um processo único como o SAX. DOM também é muito mais simples de usar.
2) SAXO
As vantagens do processamento SAX são muito semelhantes às vantagens do streaming de mídia. A análise pode começar imediatamente em vez de esperar que todos os dados sejam processados. Além disso, como o aplicativo apenas verifica os dados à medida que são lidos, não há necessidade de armazenar os dados na memória. Esta é uma enorme vantagem para documentos grandes. Na verdade, o aplicativo nem precisa analisar o documento inteiro; ele pode interromper a análise quando uma determinada condição for atendida. Em geral, o SAX também é muito mais rápido que o seu substituto, o DOM.
DOM ou SAX? Para desenvolvedores que precisam escrever seu próprio código para processar documentos XML, escolher o modelo de análise DOM ou SAX é uma decisão de design muito importante. O DOM usa uma estrutura em árvore para acessar documentos XML, enquanto o SAX usa um modelo de evento.
O analisador DOM converte um documento XML em uma árvore contendo seu conteúdo e pode percorrer a árvore. A vantagem de usar o DOM para analisar o modelo é que a programação é fácil. Os desenvolvedores só precisam chamar as instruções de construção da árvore e, em seguida, usar APIs de navegação para acessar os nós da árvore necessários para concluir a tarefa. Os elementos da árvore podem ser facilmente adicionados e modificados. No entanto, como todo o documento XML precisa ser processado ao usar o analisador DOM, os requisitos de desempenho e memória são relativamente altos, especialmente ao encontrar arquivos XML grandes. Devido às suas capacidades de passagem, os analisadores DOM são frequentemente usados em serviços onde os documentos XML precisam ser alterados com frequência.
O analisador SAX usa um modelo baseado em eventos. Ele pode acionar uma série de eventos ao analisar um documento XML. Quando uma determinada tag é encontrada, ele pode ativar um método de retorno de chamada para informar ao método que a tag especificada foi encontrada. O SAX geralmente tem requisitos de memória mais baixos porque permite que os desenvolvedores decidam quais tags processar. Especialmente quando os desenvolvedores precisam processar apenas parte dos dados contidos no documento, a escalabilidade do SAX reflete melhor. Mas a codificação é mais difícil quando se usa um analisador SAX e é difícil acessar vários dados diferentes no mesmo documento ao mesmo tempo.
3) JDOM http://www.jdom.org
O objetivo do JDOM é ser um modelo de documento específico de Java que simplifique a interação com XML e seja mais rápido do que implementá-lo usando DOM. JDOM foi fortemente promovido e promovido desde que foi o primeiro modelo específico de Java. Ele está sendo considerado para uso eventual como uma "Extensão Padrão Java" por meio de "Solicitação de Especificação Java JSR-102". O desenvolvimento do JDOM foi iniciado desde o início dos anos 2000.
Existem duas diferenças principais entre JDOM e DOM. Primeiro, o JDOM usa apenas classes concretas e não interfaces. Isso simplifica a API em alguns aspectos, mas também limita a flexibilidade. Segundo, a API faz uso extensivo da classe Collections, simplificando seu uso para desenvolvedores Java que já estão familiarizados com essas classes.
A documentação do JDOM afirma que seu objetivo é "resolver 80% (ou mais) dos problemas Java/XML usando 20% (ou menos) do esforço" (assumindo 20% com base na curva de aprendizado). O JDOM é certamente útil para a maioria dos aplicativos Java/XML, e a maioria dos desenvolvedores acha a API muito mais fácil de entender do que o DOM. JDOM também inclui verificações bastante extensas sobre o comportamento do programa para evitar que os usuários façam algo que não faça sentido em XML. No entanto, ainda é necessário que você entenda XML bem o suficiente para fazer mais do que o básico (ou até mesmo entender os erros em alguns casos). Este pode ser um trabalho mais significativo do que aprender interfaces DOM ou JDOM.
O próprio JDOM não contém um analisador. Normalmente usa um analisador SAX2 para analisar e validar documentos XML de entrada (embora também possa usar representações DOM previamente construídas como entrada). Ele contém conversores para gerar representações JDOM em fluxos de eventos SAX2, modelos DOM ou documentos de texto XML. JDOM é um código aberto lançado sob uma variante da licença Apache.
4) DOM4J http://dom4j.sourceforge.net
Embora o DOM4J represente um desenvolvimento completamente independente, era originalmente um fork inteligente do JDOM. Ele incorpora muitos recursos além da representação básica de documentos XML, incluindo suporte integrado a XPath, suporte a XML Schema e processamento baseado em eventos para documentos grandes ou de streaming. Ele também fornece opções para construir representações de documentos com recursos de acesso paralelo por meio da API DOM4J e interfaces DOM padrão. Está em desenvolvimento desde o segundo semestre de 2000.
Para suportar todos esses recursos, DOM4J usa interfaces e métodos abstratos de classe base. O DOM4J faz uso intenso da classe Collections na API, mas em muitos casos também fornece alternativas que permitem melhor desempenho ou uma abordagem de codificação mais direta. O benefício direto é que, embora o DOM4J pague o preço de uma API mais complexa, ele oferece uma flexibilidade muito maior que o JDOM.
Ao adicionar flexibilidade, integração XPath e manipulação de documentos grandes, os objetivos do DOM4J são os mesmos do JDOM: facilidade de uso e operação intuitiva para desenvolvedores Java. Também pretende ser uma solução mais completa que o JDOM, atingindo o objetivo de lidar essencialmente com todos os problemas Java/XML. Ao atingir esse objetivo, ele coloca menos ênfase do que o JDOM na prevenção do comportamento incorreto do aplicativo.
DOM4J é uma API Java XML muito excelente, com excelente desempenho, funções poderosas e extrema facilidade de uso. Hoje em dia você pode ver que cada vez mais software Java está usando DOM4J para ler e escrever XML. Vale a pena mencionar que até mesmo o JAXM da Sun também está usando DOM4J.
2... comparar
1) DOM4J tem o melhor desempenho. Até o JAXM da Sun também usa DOM4J. Atualmente, muitos projetos de código aberto usam DOM4J extensivamente. Por exemplo, o famoso Hibernate também usa DOM4J para ler arquivos de configuração XML. Se a portabilidade não for uma preocupação, use DOM4J.
2) JDOM e DOM tiveram desempenho ruim durante o teste de desempenho e estourou a memória ao testar um documento de 10M. Também vale a pena considerar o uso de DOM e JDOM no caso de documentos pequenos. Embora os desenvolvedores do JDOM tenham declarado que esperam focar em questões de desempenho antes do lançamento oficial, do ponto de vista do desempenho, isso realmente não tem nada a recomendar. Além disso, o DOM ainda é uma escolha muito boa. A implementação do DOM é amplamente utilizada em muitas linguagens de programação. É também a base para muitos outros padrões relacionados ao XML e, como é oficialmente recomendado pelo W3C (em oposição ao modelo Java não padronizado), também pode ser exigido em certos tipos de projetos (como o uso do DOM em JavaScript).
3) O SAX tem melhor desempenho, o que depende de seu método de análise específico - orientado a eventos. Um SAX detecta o fluxo XML recebido, mas não o carrega na memória (é claro que quando o fluxo XML é lido, alguns documentos ficarão temporariamente ocultos na memória).
3. Uso básico de quatro métodos de operação XML
arquivo xml: