src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
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);
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"){
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")) {
t2.setFilho1(dado);
continue;
}
if(name.equals("Tag filha2")) {
double dado=Double.parseDouble(value);
t2.setFilho2(dado);
continue;
}
if(name.equals("Tag filha3")) {
t2.setFilho2(dado);
continue;
}
if(name.equals("Tag filha3")) {
double dado=Double.parseDouble(value);
t1.setFilho3(value);
continue;
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();
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;
}
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