Agora que você já sabe criar arquivos XML com a API do JDOM, como vimos na primeira parte, vamos desenvolver um exemplo de leitura do XML utilizando o mesmo caso anterior. Abaixo você confere a estrutura do arquivo da primeira parte:

 
                <Agenda>

                <Contato id="">
                
                <nome> </nome>
                
                <telefone></telefone>
                
                <endereco> </endereco>
                
                <email> </email>
                
                </Contato>
                
                </Agenda>
            

Vamos utilizar um parser para analisar o XML. Este parser é o SAXBuilder, que será utilizado para processar a estrutura do documento para dentro de uma variável do tipo Document. O método utilizado para processar o XML é o build, que recebe como parâmetro o caminho do arquivo. Abaixo segue o código:

 
            Document doc = null;

            SAXBuilder builder = new SAXBuilder();
      
       
      
            try {
      
                  doc = builder.build("c:/arquivo.xml");
      
                 
      
            } catch (Exception e) {
      
                  e.printStackTrace();
      
            }

Agora que o documento já está processado, nós precisamos fazer uma iteração dos elementos a partir do root e exibi-los na tela. Abaixo segue o código:

Element agenda = doc.getRootElement(); 

Depois de selecionar o elemento root, vamos criar uma lista com os filhos do elemento root. A partir desta lista faremos a iteração e a recuperação dos elementos. Segue o código:

 
            List<Element> lista = agenda.getChildren();

                for (Element e: lista ){
                
                      System.out.println("Contato: "+ e.getAttributeValue("id"));
                
                      System.out.println("Nome: " + e.getChildText("nome"));
                
                      System.out.println("Telefone: " + e.getChildText("telefone"));
                
                      System.out.println("Endereço: " + e.getChildText("endereco"));
                
                      System.out.println("E-mail: " + e.getChildText("email"));
                
                                 
                
                }
            

A saída fica da seguinte forma:


Contato: 0

Nome: Glaucio Guerra

Telefone: 123-456

Endereço: Av. Amaral Peixoto S/N

E-mail: glaucioguerra@gmail.com

Contato: 1

Nome: Glaucio Guerra

Telefone: 123-456

Endereço: Av. Amaral Peixoto S/N

E-mail: glaucioguerra@gmail.com

Contato: 2

Nome: Glaucio Guerra

Telefone: 123-456

Endereço: Av. Amaral Peixoto S/N

E-mail: glaucioguerra@gmail.com

Contato: 3

Nome: Glaucio Guerra

Telefone: 123-456

Endereço: Av. Amaral Peixoto S/N

E-mail: glaucioguerra@gmail.com

Contato: 4

Nome: Glaucio Guerra

Telefone: 123-456

Endereço: Av. Amaral Peixoto S/N

E-mail: glaucioguerra@gmail.com
             

Abaixo segue o código completo:

 
package br.com.artigos.jdom;

import java.util.List;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

 

public class Main {

      @SuppressWarnings("unchecked")

      public static void main(String[] args) {

            Document doc = null;

            SAXBuilder builder = new SAXBuilder();

            try {

                  doc = builder.build("c:/arquivo.xml");

                 

            } catch (Exception e) {

                 

                  e.printStackTrace();

            }           

           

            Element agenda = doc.getRootElement();

            List<Element> lista = agenda.getChildren();

            for (Element e: lista ){

                  System.out.println("Contato: "+ e.getAttributeValue("id"));

                  System.out.println("Nome: " + e.getChildText("nome"));

                  System.out.println("Telefone: " + e.getChildText("telefone"));

                  System.out.println("Endereço: " + e.getChildText("endereco"));

                  System.out.println("E-mail: " + e.getChildText("email"));

                 

            }           

           

      }

 }
            

Como o valor de contato é um Atributo, a forma que temos para acessar este membro é diferente de todas as outras. De acordo com o exemplo acima, a função seria e.getAttributeValue() e não e.getChildText(). Outro item que deve ser observado são as exceções lançadas pelo build da classe SaxBuilder. No caso exibido, foi generalizada a Exception. No entanto, existem pelo menos duas exceções a serem tratadas de forma mais especifica: a IOException e a JDOMException.

Neste artigo você conferiu como criar e ler arquivos XML. Agora é só usar a sua criatividade para utilizar este formato que faz a diferença na hora de tramitar informações de forma clara, independentemente da plataforma, e personalizar as suas tags muito facilmente. Até a próxima.