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. */packagelendoarquivojava;importjava.io.File;importjava.io.IOException;importjava.util.Iterator;importjava.util.List;//import javax.lang.model.element.Element;importjavax.swing.text.Document;importjavax.swing.text.Element;importorg.jdom.JDOMException;importorg.jdom.input.SAXBuilder;/** * * @author David */publicclassMain{publicstaticvoidmain(String[]args)throwsJDOMException,IOException{FilearquivoXML=newFile("C:/Users/fulano/cidades.xml");//Criamos uma classe SAXBuilder que vai processar o XML4SAXBuildersb=newSAXBuilder();//Este documento agora possui toda a estrutura do arquivo.DocumentdocumentoXML=(Document)sb.build(arquivoXML);//Recuperamos o elemento rootElement[]cidades=documentoXML.getRootElements();//Recuperamos os elementos filhos (children)Listelements=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. Iteratori=elements.iterator();while(i.hasNext()){Elementelement=(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?
D
david.jv
zoren:
O vetor cidades não tem esse método
para você usar esse método tem que pegar uma posição do vetor
e o método getChildren() retorna o que?
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:
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).
zoren
Sugiro que você de uma olhada nos tutoriais de XML aqui do GUJ.
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><usuarioid="0">//Esta ai o id deles<nome>DanielDestrodoCarmo</nome><idade>23</idade><email>[emailremovido]</email></usuario>
packagelendoarquivojava;publicclassCidade{publicStringseq;publicStringcidade;publicStringbairro;publicStringcep;publicStringuf;//contrutor da classepublicCidade(Stringseq,Stringcidade,Stringbairro,Stringcep,Stringuf){this.seq=seq;this.cidade=cidade;this.bairro=bairro;this.cep=cep;this.uf=uf;}}
lê o XML
packagelendoarquivojava;importjava.util.Vector;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.jdom.Element;importorg.w3c.dom.Document;importorg.w3c.dom.NodeList;publicclassLeXml{privateStringxmlPathname;// construtor que seta o caminho do XMLpublicLeXml(Stringpath){xmlPathname=path;}// le o XML carregando os dados das cidades em um Vector.// retorna o vector contendo as cidades cadastradas no XML.publicVectorlerCidade()throwsException{DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();Documentdoc=db.parse(xmlPathname);Elementelem=(Element)doc.getDocumentElement();// pega todos os elementos seq do XMLNodeListnl=elem.getElementsByTagName("seq");// getElementsByTagName não é aceito, tipo, ele não me da essa opção(cannot find symbol)// prepara o vetorVectorLista=newVector();// percorre cada elemento seq encontradofor(inti=0;i<nl.getLength();i++){ElementtagSeq=(Element)nl.item(i);// pega os dados cadastrado para o seq atualStringseq=getChildTagValue(tagSeq,"Seq");Stringcidade=getChildTagValue(tagSeq,"cidade");Stringbairro=getChildTagValue(tagSeq,"bairro");Stringcep=getChildTagValue(tagSeq,"cep");Stringuf=getChildTagValue(tagSeq,"uf");// cria uma nova instancia do UsuarioGuj com os dados do xmlCidadecidadE=newCidade(seq,cidade,bairro,cep,uf);// adiciona o usuario na coleção (vector) de usuários do gujLista.addElement(cidadE);}returnLista;}// 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)privateStringgetChildTagValue(Elementelem,StringtagCidade)throwsException{NodeListchildren=elem.getElementsByTagName(tagCidade);// getElementsByTagName não é aceito, tipo, ele não me da essa opção (cannot find symbol)if(children==null){returnnull;}Elementchild=(Element)children.item(0);if(child==null){returnnull;}returnchild.getFirstChild().getNodeValue();//getFirstChild() não é aceito, tipo, ele não me da essa opção (cannot find symbol)}}
Main
packagelendoarquivojava;importjava.util.Vector;publicclassMain{publicclassCadastraCidade{publicCadastraCidade(){try{// informe o caminho correto do arquivo xmlLeXmlreader=newLeXml("C://Users/David/Documents/cidades.xml");Vectorcidades=reader.lerCidade();// imprime na tela as cidades cadastradasfor(inti=0;i<cidades.size();i++){Cidadecidade=(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(Exceptione){e.printStackTrace();}}}publicstaticvoidmain(String[]args){newCadastraCidade();// DÁ ESSE ERRO: non-static variable this cannot be referenced from a static context}}