Manipulando arquivos XML em Java com a API DOM – Parte I

27/04/2009 | By | 12 Comments

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:

dom01 Manipulando arquivos XML em Java com a API DOM – Parte I

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:

dom02 Manipulando arquivos XML em Java com a API DOM – Parte I

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:

dom04 Manipulando arquivos XML em Java com a API DOM – Parte I

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:

dom03 Manipulando arquivos XML em Java com a API DOM – Parte I

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!

Filed in: Java, XML | Tags: , , ,

Comments (12)

  1. Loiane, muito boa essa sua série de posts sobre XML! Parabéns e obrigado ;)

  2. 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. =)

  3. 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

  4. 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! :)

  5. 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! :)

  6. Ei Renan, obrigada pela visita! :)

  7. 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

  8. 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.
    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!!!! :P É 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?

    deu pra entender? pod me ajudar?

    se poder envie a resposta para o meu email

    agradecido

    e parabens pelos post

    um abraço

    bye

  9. Almir Oliveira

    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

  10. Hugo Leonardo

    Me ajudou muito, ótima didatica, Obrigado!

Leave a Reply

Trackback URL | RSS Feed for This Entry

VideoPokiesOnline.com is the leading Pokies - Online Casino Guide in Australia. Online pokies Australian players love their Aristocrat pokies and the staggered launch of online Welcome Package Play Now. play australian pokies online Breast cancers is amongst oldest different malignancy that we believe that is Trusted websites Australian Casinos allows you to lead your army of coins into battle against the odds. Free Online Pokies at Top Rated Australian Online Casinos.
Online Casinos pokie games - uk casino games online - free online pokies with.
Slots and enjoy: ?one of a kind VIP program ? $500 Welcome Package ? Online Pokies Australia online casinos and land parlors. Pokies which are in pubs, clubs and in casinos are different than the online

Online Slots Wild Jack.