Parseando XML com o DOM
em 26/10/2002
, por Daniel Destro
Iremos mapear o XML acima para objetos da classe UsuarioGUJ, descrita pelo código Java a seguir:
Decidi definir o atributo id como int pois leva-se em conta que ele é obrigatório; já os outros atributos estão como tipos abstratos e suportam o valor null ou um valor do mesmo tipo definido. Apenas uma questão de análise do seu problema.
Nosso objetivo aqui será ler o XML, e para cada item (tag) usuario encontrada no XML ele cria uma instância da classe UsuarioGUJ e informa os valores lidos do XML e então adiciona esta instância em um conjunto de objetos (Vector) compondo os usuários do guj cadastrados no XML.
A classe GujXmlReader terá a responsabilidade de ler o conteúdo do arquivo XML e popular os dados da intância da classe UsuarioGUJ. É neste exato ponto deste artigo que será exemplificado o código Java para que o conteúdo do XML seja lido e populado no nosso programa.
Até aqui muti simples. Criamos a classe que irá ler o XML, e com um construtor que recebe o caminho para o arquivo que iremos ler. Vamos começar a criar o método que nos retorna o Vector de UsuarioGUJ:
Pela classe DocumentBuildFactory, você pega uma factory e depois consegue um DocumentBuilder, que vai fazer o parse do XML. Após a chamada do parser, temos um objeto do tipo Document. DocumentBuilder e a sua Factory estão no pacote javax.xml.parsers do java 1.4. Se você não tem java 1.4, vai precisar puxar um parser do apache: xerces ou xalan, e colocar o .jar no classpath. lembre de modificar o import. Essas interfaces estão no pacote org.w3c.dom. Agora é o ótimo momento para que você leia as classes do pacote org.w3c.dom. Clique aqui para a API.
Vamos pegar o elemento principal do documento, que é o , e depois explodi-lo em uma lista de nós, cada um representado um usuário!
Tendo todos os nós do XML, percorremos esses nós e começamos a pegar os dados, através dos elementos desses nós! Criamos um usuarioGUJ para cada nó e vamos colocando eles no Vector, para depois retorná-lo.
Para finalizarmos o código do nosso programa teremos mais uma classe, a CadastroUsuariosGUJ. Ela apenas lê o XML e roda o nosso programa!
import java.util.Vector;
public class CadastroUsuariosGUJ {
public CadastroUsuariosGUJ() {
try {
// informe o caminho correto do seu arquivo xml
GujXmlReader reader = new GujXmlReader( "C:\\cadastro_guj.xml" );
Vector usuarios = reader.lerUsuariosGuj();
// imprime na tela os usuarios cadastrados
for( int i=0; i
Introdução
Oi pessoal! Neste tutorial vou mostrar em um exemplo bem prático como se faz para ler um documento XML bem estruturado, com Java, jogando-se os dados dentro de uma instância de classe mapeada pelo XML.
Para tanto usaremos a API DOM, disponível no JDK 1.4 da SUN. Esta API é muito mais interessante de usar do que a SAX, já que ela mapeia diretamente um XML na memória. Mas como vocês podem deduzir, o gasto de memória é alto, não aconselhado para XMLs gigantescos.
Caso você não tenha java 1.4, pode utilizar algum dos parsers XML padrão DOM criados pela Apache. Como por exemplo o xerces.
O problema
Você tem um XML, e a estrutura deste XML é muito parecida com a estrutura de uma classe sua, e você quer crar objetos de acordo com esse XML.
Para nosso exemplo prático vamos tomar como dados do XML o código:
Iremos mapear o XML acima para objetos da classe UsuarioGUJ, descrita pelo código Java a seguir:
Até aqui muti simples. Criamos a classe que irá ler o XML, e com um construtor que recebe o caminho para o arquivo que iremos ler. Vamos começar a criar o método que nos retorna o Vector de UsuarioGUJ:
Pela classe DocumentBuildFactory, você pega uma factory e depois consegue um DocumentBuilder, que vai fazer o parse do XML. Após a chamada do parser, temos um objeto do tipo Document. DocumentBuilder e a sua Factory estão no pacote javax.xml.parsers do java 1.4. Se você não tem java 1.4, vai precisar puxar um parser do apache: xerces ou xalan, e colocar o .jar no classpath. lembre de modificar o import. Essas interfaces estão no pacote org.w3c.dom. Agora é o ótimo momento para que você leia as classes do pacote org.w3c.dom. Clique aqui para a API.
Tendo todos os nós do XML, percorremos esses nós e começamos a pegar os dados, através dos elementos desses nós! Criamos um usuarioGUJ para cada nó e vamos colocando eles no Vector, para depois retorná-lo.
Conclusão
Esta solução é trivial e não muito performática, mas funciona. Pela experiência que tive com o DOM XML eu consegui resolvi assim o meu problema para ler o conteúdo de uma estrutra em XML e popular os dados no meu aplicativo.
Os arquivos supracitados estão disponíveis para download aqui.
Bom, espero que este tutorial tenha sido bem proveitoso.