Manipulando arquivos XML em Java com a API DOM – Parte I
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!