segunda-feira, 12 de outubro de 2009

Lendo xml com java




Olá a todos!

Na minha primeira postagem eu vou tratar de um assunto que é muito importante na vida de todo programador, e que me torrou o juizo por um certo tempo.

Como ler um arquivo xml, capturando seus dados e os convertendo em um objeto java.

Então vamos lá!

Primeiramente nós montaremos um esqueleto de um xml sem shema nem encoding





Pronto, com a estrutura reconhecida, nós podemos motar classes que terão como função guardar esses respectivos valores.

Então supondo que as classes devem ter construtores e seus respectivos gets and sets ,faremos:

public class Tag1{
private String filho1;

private String filho2;

private String filho3;

.

.

.

}

public class Tag2{

private double filho1;
private double filho2;
private double filho3;
.
.
.
}

Partindo para a captura dos dados, nós faremos da seguinte forma:

public void leituraXML(String fileName){
Tag1 t1 = new Tag1();
Tag2 t2 = new Tag2();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(fileName));
NodeList nodes = document.getElementsByTagName("Tag paiA");

if (nodes.getLength() == 1) {
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i < align="justify">Node node = nodes.item(i);
String name = node.getNodeName();
String value = node.getTextContent();
if (name.equals("Tag filha1"){
t1.setFilho1(value);
continue;
}
if(name.equals("Tag filha2")) {
t1.setFilho2(value);
continue;
}

if(name.equals("Tag filha3")) {
t1.setFilho3(value);
continue;
}
}
}
// agora pegaremos os dados da outra tagPai
nodes = document.getElementsByTagName("Tag paiB");
if (nodes.getLength() == 1) {
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i < node =" nodes.item(i);" name =" node.getNodeName();" value =" node.getTextContent();" color="#3333ff">if
(name.equals("Tag filha1"){
double dado=Double.parseDouble(value);//Devemos fazer o parse pois tudo que vem do xml é um String
t2.setFilho1(dado);
continue;
}
if(name.equals("Tag filha2")) {
double dado=Double.parseDouble(value);
t2.setFilho2(dado);
continue;
}
if(name.equals("Tag filha3")) {
double dado=Double.parseDouble(value);
t1.setFilho3(value);
continue;
}

}
}


}


Notem que ele gera uma arvore com o xml.

Onde nós recebemos um NodeList, nós só precisamos setar o nome da Tag pai e ter acesso a todos os elementos que há dentro dela.

E assim funciona para o arquivo completo.

Existe mais um caso que eu gostaria de mostrar a todos vocês.
Suponhamos que agora nós temos o seguinte esqueleto


E queremos pegar tudo o que há na tag secundária.
Então, o que fazer?

nodes = document.getElementsByTagName("Tag secundaria");
if(nodes.getLength==1){
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i node.getLength;i++){
Node node = nodes.item(i);
String name = node.getNodeName();
String value = node.getTextContent();
if (name.equals("Valor X")) {
objeto.setValorX(value);
continue;
}
if (name.equals("Valor Y")) {
objeto.setValorY(value);
continue;
}
if(name.equals("Valores")){
NodeList nodes1=nodes.item(i).getChildNodes();
for(int y=0;y <>
Node nodeF1=nodes1.item(y);
String nameF1=nodeF1.getNodeName();
String valueF1=nodeF1.getTextContent();
if(nameF1.equals("Valor A")){
objeto.setValorA(valueF1);
continue;
}
if(nameF1.equals("Valor B")){
objeto.setValorB(valueF1);
continue;
}
}
}
Com isso pessoal nós conseguimos capturar os valores que encontram-se dentros das tags do xml.
Lembrando que esses valores vêm sempre em Strings.
E é isso!
Espero que tenha ajudado...
Abraço a todos!







Nenhum comentário:

Postar um comentário