Manipulando arquivos XML em Java com a API DOM – Parte I
Posted by Loiane | Posted in XML, java | Posted on 27-04-2009
11
A interface DOM
DOM é uma interface de programação, baseada no modelo de objetos, que permite a manipulação e transformação de documentos em XML. A interface DOM manipula documentos XML na forma de uma estrutura em árvore. Quando um documento é carregado na memória do computador, suas estruturas podem ser lidas e manipuladas através do objeto DOM.
A interface DOM faz a representação do documento XML na forma de uma árvore de objetos, onde cada nó da árvore representa um componente do documento. Após o processamento completo do documento XML, a memória deverá conter a árvore de objetos DOM, a qual disponibiliza para as aplicações qualquer informação relacionada à estrutura e ao conteúdo do documento.
O modelo implementado pela interface DOM é a forma mais flexível para manipulação do conteúdo de um documento XML. Este modelo não é limitado pela ordem em que as estruturas do documento são processadas, logo é possível navegar pelo documento em qualquer ordem. Contudo, como utilização do objeto DOM requer a leitura de toda estrutura XML em uma árvore na memória, pode acontecer um alto consumo de recursos da máquina.
O modelo DOM define classes de objetos para representar cada fragmento de um documento XML. Existem objetos para representação de elementos, atributos, entidades, texto, entre outros. O objeto básico do DOM é o nó (Node). Existem especializações para os diversos tipos de nó. O nó é um objeto genérico na árvore e, portanto, a maioria dos objetos DOM herdam dele. O elemento mais alto de uma árvore DOM é representado pelo objeto Document, que também herda do objeto Node. Conceitualmente, este elemento é a raiz da árvore e a partir dele é possível acessar a árvore completa do documento XML.
A figura abaixo representa o mapa DOM:

Agora você já sabe que a interface DOM é baseada em uma estrutura em forma de árvore; sabe que a árvore Dom contém um número de nós (Node). Do ponto de vista da linguagem java, um Node é uma interface. O Node é um tipo de dado base do DOM. Tudo na árvore DOM é um Node de um tipo ou de algum outro tipo.
Observe algumas interfaces importantes da API DOM:

O DOM define algumas subinterfaces da interface Node:
- Element: representa um elemento XML
- Attr: representa um atributo do elemento XML
- Text: é o conteúdo de um elemento. Isso significa que um elemento com informação do tipo texto contém um filho do tipo nó de texto
- Document: represente todo o documento XML. Apenas um objeto Document existe em cada XML que você faz o parse. Dado um objeto Document, você pode saber qual o elemento raiz da árvore DOM; a partir da raiz, você pode usar as funções da interface DOM para ler a manipular a árvore XML.
Alguns outros tipos: Comment, que representa um comentário no arquivo XML; ProcessingInstruction, que representa uma instrução de processamento; CDATASection, que representa uma seção CDATA.
É um pouco raro utilizar esses tipos, mas agora você já sabem que eles também existem.
Métodos
Quando se trabalha com DOM, você geralmente irá chamar os métodos listados abaixo:
- Document,getDocumentElement(): retorna o elemento raiz da árvore DOM.
- Node.getFirstChild() e Node.getLastChild(): retorna o primeiro elemento filho ou o último elemento filho de um determinado nó.
- Element.getAttribute(String attrName): para um dado Elemento (Element), retorna o valor do atributo cujo nome foi passado como parâmetro. Se você quiser saber qual é o vlaor do atributo ‘id’, use Element.getAttribute(“id”). Se o atributo não existe, retorna uma String vazia (“”).
Exemplo XML e DOM
Vamos pegar o XML abaixo como exemplo:

Apesar da interface DOM não especificar como se deve parsear um documento XML, especifica a sintaxe do documento e como os elementos estão estruturados como objetos DOM. Um documento XML é armazenado numa estrutura hierárquica em forma de árvore, e para cada elemento da árvore, é feita a conexão com seu pai ou filho, ou ainda informação (dado em forma de texto).
A figura abaixo mostra como é a estrutura do XML acima vista pela API DOM:

Conclusão
A interface baseada em objeto, semelhando ao DOM, é ideal para aplicações que manipulam todo o documento XML, tais como: navegadores, editores, processadores XSL, entre outras.
E no próximo post sobre a série, um passo a passo em java de como manipular um documento XML utilizando a interface DOM.
Até a próxima!



Loiane, muito boa essa sua série de posts sobre XML! Parabéns e obrigado
Gostei do layout novo do seu blog.
Espero que esteja tudo bem no seu trabalho novo. Por aqui o frio continua, mas ta um pouco melhor. =)
Um adendo só, essa versão do DOM foi baseada no do , certo? Li em algum lugar, não lembro onde, que ele carrega o XML inteiro na memória quando faz o parse, causando lentidão se o XML for grande. Sabe de algo nesse sentido, se isso é verdade ou balela? Um outro parser que vi por cima foi o XStream, seria legal uma comparação entre alguns parses hein =D
Show o post, continue assim. Parabéns!
Abraço
Ei Eduardo, você está correto. O DOM carrega todo o arquivo para a memória, possibilitando o acesso a qualquer parte do arquivo na hora que você quiser. Já o SAX, que é um outro parser, trabalha com eventos, ou seja, à medida que encontra um elemento/nó, dispara um evento, e assim podemos capturar a informação. Vou escrever um post sobre o SAX, é o próximo quando terminar sobre o DOM. O XStream é um outro parser, vou falar sobre ele também e alguns outros frameworks.
E obrigada pela visita!
Ei Daniel, obrigada pela visita. Tô adorando o novo trabalho! Aqui tá começando a esfriar, o ES é mais quente, então tô sentindo uma diferença boa de clima!
Ei Renan, obrigada pela visita!
[...] que cria um Nó de texto para relacionar ao elemento Telefone (pode relembrar como é árvore DOM aqui)). Após criar o novo elemento telefone, vamos subtituir o novo elmento pelo elemento que já [...]
Parabéns pelo excelente trabalho publicado.
Estou trabalhando no projeto NFe- Nota Fiscal Eletrônica e surgiram muitas dúvidas e dificuldades para trabalhar com XML ultilizando:
– Java XMLSignature,
– JDOM
– Xpath
– SOAP/WSDL – ( SOA/Web Serbvices )
– Certificado Digital
para Gerar NFe em formato XML, aplicar o Certificado Diginal – e-CNPJ ( ICP-Brasil), Validar com o SCHEMA nacional da NFe, gerar Lotes de Notas, trasmitir usando SOAP e WSDL e gerar DANFE com codigos de barras.
Agradeços in formações sobre como aplicar Certificados Digitais, Validar e chamar WSDL com SOAP.
Ats.
JoãoAbreu
prezada Loiane,
sou DBA mas, devido a necessidade de pouca gente trabalhando por aqui, estou desenvolvendo!
Estou com uma missao aqui no trabalho e procurando parser XML achei o seu post…
o problema é o seguinte: utilizamos o frame JSF, na aplicação o usuário seleciona campos que desejam que estejam em um relatório, inicialmente uma página jsp! O passo é que esse relatório customizado gere relatórios gráficos usando o fusion chart.
É necessário atualizar o projeto e tudo mais…como contorna esse problema? Pensei: se caso o XML estiver em memória? No caso do DOM ele somente le XML ou pode receber parametros do relatorio e gerar o XML a partir dae em memoria o fusion chart le-lo?
No fusion preciso de um arquivo XML, após a geração do relatorio pelo usuário é gerado um XML soh que: o fusion nao “enxerga” o arquivo!!!!
deu pra entender? pod me ajudar?
se poder envie a resposta para o meu email
agradecido
e parabens pelos post
um abraço
bye
[...] Manipulando arquivos XML em Java com a API DOM – Parte I [...]
Boa noite!
Primeiro que parabenizá-la pelo blog e pelos seus conteúdos e dicas, pois tem me ajudado muito!
Eu tenho usado muito a API DOM do Java para criação dos meus documentos XML, e me deparei com um problema (não sei se é problema de fato).
Quando eu gero um documento XML qualquer com “nodes” e “atributos”, eu noto que os atributos saem em ordem alfabética e na ordem que eu especifiquei. Será que tem como eu colocá-los na ordem que eu quero?
Agradeço desde já!
Almir Oliveira