Peoples, peguei um arquivo xml com meu colega e estou tentando ler e gravar o arquivo em um banco de dados, mas não estou conseguindo. Vou postar uma parte do código xml e o código java que le o arquivo:
Obs.: é a primeira vez que mexo com xml+java+banco
CÓDIGO XML
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lendoarquivojava;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//import javax.lang.model.element.Element;
import javax.swing.text.Document;
import javax.swing.text.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
/**
*
* @author David
*/
public class Main {
public static void main(String[] args) throws JDOMException, IOException {
File arquivoXML = new File("C:/Users/fulano/cidades.xml");
//Criamos uma classe SAXBuilder que vai processar o XML4
SAXBuilder sb = new SAXBuilder();
//Este documento agora possui toda a estrutura do arquivo.
Document documentoXML = (Document) sb.build(arquivoXML);
//Recuperamos o elemento root
Element[] cidades = documentoXML.getRootElements();
//Recuperamos os elementos filhos (children)
List elements = cidades.getChildren(); // O SE ENCONTRA NESTA LINHA. NA VERDADE NUM SE TRATA DE UM ERRO ELE SIMPLESMENTE NÃO ACEITA O //.getChildren(), ele não me da essa opção.
Iterator i = elements.iterator();
while (i.hasNext()) {
Element element = (Element) i.next();
}
}
}
para você usar esse método tem que pegar uma posição do vetor
e o método getChildren() retorna o que?[/quote]
Zoren, é o seguinte,Eu dei uma olhada em alguns tutoriais e eles disseram que tem que criar uma estrutura para o xml, só que eu não estou conseguindo fazer essa estrutura. Eu me equivoquei e coloquei a parte errada, o que eu queria postar é a estrutura, só que ela esta toda errada e preferi não posta-lá.
Se você souber como faz a estrutura para esse xml que eu postei ai e puder me ajudar eu agradeço.
Vou postar a minha tentativa de estrutura:
Element row = new Element("row");
Element id = new Element ("Seq");
Element nome = new Element ("Nome");
Element nomeSemAcento = new Element ("NomeSemAcento");
Element cep = new Element ("Cep");
Element uf = new Element ("UF");
apartir dai não sei pra onde vai, pois a maioria dos tutoriais tem uma um xml com estrutura diferente e eu não entendi muito bem e nem sei se está certo essa “estrutura” que eu fiz.
Só para constar esse xml foi gerado de uma tabela de um banco de dados (mysql).
[quote=zoren]Sugiro que você de uma olhada nos tutoriais de XML aqui do GUJ.
Continuar sem entender vai ser bem difícil.
http://guj.com.br/article.list.logic#category_18[/quote]
Tá, Zoren, eu entendi como é o processo e tal, só que eu não sei como faço a estrutura do meu xml, pois nos tutoriais eles colocam um id que no meu xml não existe, tipo assim:
NO XML DOS TUTORIAIS:
<guj>
<usuario id="0"> //Esta ai o id deles
<nome>Daniel Destro do Carmo</nome>
<idade>23</idade>
<email>danieldestro@uol.com.br</email>
</usuario>
package lendoarquivojava;
public class Cidade {
public String seq;
public String cidade;
public String bairro;
public String cep;
public String uf;
//contrutor da classe
public Cidade(String seq, String cidade, String bairro, String cep, String uf){
this.seq = seq;
this.cidade = cidade;
this.bairro = bairro;
this.cep = cep;
this.uf = uf;
}
}
lê o XML
package lendoarquivojava;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.jdom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class LeXml {
private String xmlPathname;
// construtor que seta o caminho do XML
public LeXml( String path ) {
xmlPathname = path;
}
// le o XML carregando os dados das cidades em um Vector.
// retorna o vector contendo as cidades cadastradas no XML.
public Vector lerCidade() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(xmlPathname);
Element elem = (Element) doc.getDocumentElement();
// pega todos os elementos seq do XML
NodeList nl = elem.getElementsByTagName("seq"); // getElementsByTagName não é aceito, tipo, ele não me da essa opção(cannot find symbol)
// prepara o vetor
Vector Lista = new Vector();
// percorre cada elemento seq encontrado
for (int i = 0; i < nl.getLength(); i++) {
Element tagSeq = (Element) nl.item(i);
// pega os dados cadastrado para o seq atual
String seq = getChildTagValue(tagSeq , "Seq");
String cidade = getChildTagValue(tagSeq, "cidade");
String bairro = getChildTagValue(tagSeq, "bairro");
String cep = getChildTagValue(tagSeq, "cep");
String uf = getChildTagValue(tagSeq, "uf");
// cria uma nova instancia do UsuarioGuj com os dados do xml
Cidade cidadE = new Cidade(seq, cidade, bairro, cep, uf);
// adiciona o usuario na coleção (vector) de usuários do guj
Lista.addElement(cidadE);
}
return Lista;
}
// este método lê e retorna o conteúdo (texto) de uma tag (elemento)
// filho da tag informada como parâmetro. A tag filho a ser pesquisada
// é a tag informada pelo nome (string)
private String getChildTagValue(Element elem, String tagCidade) throws Exception {
NodeList children = elem.getElementsByTagName(tagCidade); // getElementsByTagName não é aceito, tipo, ele não me da essa opção (cannot find symbol)
if (children == null) {
return null;
}
Element child = (Element) children.item(0);
if (child == null) {
return null;
}
return child.getFirstChild().getNodeValue(); //getFirstChild() não é aceito, tipo, ele não me da essa opção (cannot find symbol)
}
}
Main
package lendoarquivojava;
import java.util.Vector;
public class Main {
public class CadastraCidade {
public CadastraCidade() {
try {
// informe o caminho correto do arquivo xml
LeXml reader = new LeXml("C://Users/David/Documents/cidades.xml");
Vector cidades = reader.lerCidade();
// imprime na tela as cidades cadastradas
for (int i = 0; i < cidades.size(); i++) {
Cidade cidade = (Cidade) cidades.get(i);
System.out.println("Seq: " + cidade.seq);
System.out.println("Cidade: " + cidade.cidade);
System.out.println("Bairro: " + cidade.bairro);
System.out.println("Cep: " + cidade.cep);
System.out.println("UF: " + cidade.uf);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new CadastraCidade(); // DÁ ESSE ERRO: non-static variable this cannot be referenced from a static context
}
}