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.