Buscando informações em arquivos XML de forma simples com o

Propaganda
Jogo Rápido
coluna
Autor: Rodrigo Barbosa Cesar ([email protected])
Buscando informações em arquivos
XML de forma simples com o JDOM
H
oje em dia, muita coisa se baseia em XML. Desde um simples
histórico de uma aplicação de comunicação a complexos web
sevices que compõem uma aplicação SOA. Dessa forma, é
muito importante conhecer ferramentas para interpretar arquivos XML.
Existem várias ferramentas que facilitam esta interpretação, como JAXB
(Java Architecture for XML Binding), JAXP (Java API for XML Processing)
e JDOM. Neste artigo, será visto como é simples buscar informações em
um arquivo XML utilizando JDOM.
Imagine que existe um arquivo com o nome de funcionarios.xml (Listagem 1), no qual está a lista de vendedores de uma distribuidora. Suponha que a aplicação deverá imprimir um relatório com todos os clientes
de um determinado vendedor.
Listagem 1. funcionarios.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<funcionarios>
<vendedor>
<nome>George Carlos</nome>
<idade>26</idade>
<clientes>
<comprador>Grandes Carros LTDA.</comprador>
<comprador>Tubos Metalicos SA</comprador>
</clientes>
</vendedor>
<vendedor>
<nome>Rodrigo Cesar</nome>
<idade>22</idade>
<clientes>
<comprador>Alite Telecom</comprador>
<comprador>guiaminas.com</comprador>
<comprador>Umaempresa LTDA.</comprador>
</clientes>
</vendedor>
</funcionarios>
6
www.mundoj.com.br
$PMVOBt+PHP3ÈQJEP
Listagem 2. XmlReader.java
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
O primeiro passo é acessar o site do JDOM e fazer o download da API.
Para isso, acesse www.jdom.org e clique no link “Binaries” que está localizado logo abaixo de downloads. Na página “Binaries”, clique em JDOM
1.1 e faça o download.
Na sequência, abra a IDE de sua preferência (eclipse, netbeans etc.) crie
um novo projeto e carregue a API em seu classpath. A classe XmlReader
apresentada na Listagem 2 mostra como pode ser feita a leitura do documento XML.
Veja na tabela a seguir como é simples iniciar a leitura do documento:
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class XMLreader{
public List<String> search(String fileName, String findName) {
SAXBuilder.build(File file);
Retorna um Document, a partir
dele você terá acesso ao primeiro
elemento (raiz) do arquivo XML.
document.getRootElement();
Retorna o primeiro elemento (um
objeto Element) do arquivo XML.
List<String> found = new ArrayList<String>();
File file = new File(fileName);
SAXBuilder builder = new SAXBuilder();
Document document;
try {
document = builder.build(file);
Element employee = document.getRootElement();
// abaixo da raiz (funcionarios) temos uma lista de vendedores
List sellers = employee.getChildren(“vendedor”);
Iterator it = sellers.iterator();
while (it.hasNext()) {
Element seller = (Element) it.next();
// abaixo da lista de vendedores temos um nome, uma idade e os clientes
Element name = seller.getChild(“nome”);
if (element.getText().equals(text)) {
found .add(name.getText());
Element costumers = seller.getChild(“clientes”);
// abaixo de clientes temos uma lista de compradores
List buyers = costumers.getChildren(“comprador”);
Iterator i = buyers.iterator();
A partir de um objeto Element, é possível pegar um elemento filho ou
uma lista de elementos filho, usando o getChild (para obter um filho)
e getChildren (para obter a lista de filhos). Com getChild e getChildren,
consegue-se facilmente navegar por todo documento. O objeto Element
também possui o método getName, que retorna a “tag” atual (ou seja,
nome do elemento). Outro método muito importante do objeto Element é o getText, que retorna o texto entre as tags do elemento. Para
recuperar dados de atributos do elemento corrente, utilize o método
getAttribute("nomedoatributo").getValue().
while (i.hasNext()) {
Element buyer = (Element) i.next();
found.add(buyer.getText());
Listagem 3. Parte do documento funcionarios.xml.
...
}
<vendedor>
}
}
} catch (JDOMException e) {
<nome>George Carlos</nome>
<idade>26</idade>
e.printStackTrace();
} catch (IOException e) {
...
e.printStackTrace();
}
return found;
}
}
Suponha que o método getChild() foi utilizado para navegar pelo documento até chegar no elemento na Listagem 3. Se for utilizado element.
getName(), o retorno será “vendedor”. O método getChild("nome") faria
com que descesse mais um nó, e então se poderá utilizar o getText() para
SFUPSOBSi(FPSHF$BSMPTwt
7
Download