Leitura de arquivo .xml

Bom dia pessoal…

Bom, necessito ler um arquivo .xml gerado por outro aplicativo… gostaria de saber qual a melhor ferramenta para usuar XStream ou JDon… e se alguem puder passar um trecho de código que faça essa leitura tambem… estou ficando doido aqui… rsrsrsrs

abraços…

Até onde vão meus conhecimentos, o XStream só é bom se você tem independência pra alterar o XML que vem ou os objetos do seu sistema… pessoalmente, acho a api DOM mais flexível.

Olá rafaels,
Eu uso o XStream para criar objetos a partir do xml,
porém eu possuo um bean que tem a mesma estrutura do xml e
fazer isso é bem facil.

exemplo

XStream xstream = new XStream();
List<Bairros> bairros = (List<Bairros>) stream.fromXML(new FileReader(new File("localDoXml")));

espero ter ajudado…
até+

Pessoal não estou conseguindo…

a estrutura do meu xml é a seguinte

<Pessoa>
 	<id>1</id>
	<nome>Vinci Pegoretti Amorim</nome> 
                 <email>vinci_amorim@yahoo.com.br</email>
	<telefone>(37)3389-1994</telefone>
</Pessoa>

porém quando chamo a linha de código que vc citou CERJR
ocorre o seguinte erro…

Exception in thread "main" java.lang.ClassCastException: Pessoa cannot be cast to java.util.List
        at dados.LerXML.leXML(LerXML.java:20)
        at EdNFe.main(EdNFe.java:17)
Java Result: 1

faço a chamanda da seguinte forma…

       XStream xstream = new XStream();
        try {            
            List<Pessoa> pessoas = (List<Pessoa>) xstream.fromXML(new FileReader(new File(nomeArq)));
         
        } catch (FileNotFoundException ex) {
            Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
        }    
        return pessoa;

nomeArq é uma String que recebe o local e o nome do meu arquivo Ex: “c://arq.xml”

se alguem puder me ajudar…

Rafaels, se vc irá usar de validação desse xml através de um schema (.xsd) aconselho usar o JAXB da SUN. É bem tranquilo e na própria documentação da SUN tem exemplos práticos de como se usar.

Abraços

rbamartins… você teria algum link que possa dar uma olhada sobre tal api??

acho que vai me servir para projetos futuros…

através dela consigo pegar os dados do xml e transformá-los em objetos???

Rafael,

Tente primeiro ler a documentação do XStream http://xstream.codehaus.org/. Depois disso, você certamente vai conseguir fazer o parse do seu XML para Objeto. Dificilmente um exemplo do fórum vai encaixar exatamente para a sua necessidade

[quote=rafaels]rbamartins… você teria algum link que possa dar uma olhada sobre tal api??

acho que vai me servir para projetos futuros…

através dela consigo pegar os dados do xml e transformá-los em objetos???

[/quote]

Isso. Faça como o Jair falou.

Link com a documentação JAXB -> http://java.sun.com/javaee/5/docs/tutorial/doc/bnazg.html
Não lembro ao certo, mas em meu blog já postei algo sobre o assunto -> http://rafaelmartinsjava.blogspot.com
Neste tópico do GUJ que é de um projeto que participo também tem vários exemplos sobre tal implementação -> http://www.guj.com.br/posts/list/59950.java

Abraços

valeu moçada…

consegui resolver meu problema aqui…

boa tarde a todos… :smiley:

rafaels,
então o problema que está acontecendo é porque você está tentando converter uma pessoa para um List.

 <Pessoa>  
     <id>1</id>  
     <nome>Vinci Pegoretti Amorim</nome>   
                  <email>vinci_amorim@yahoo.com.br</email>  
     <telefone>(37)3389-1994</telefone>  
 </Pessoa>

se vc fizer essa alteração resolve…

<list>
   <Pessoa>  
        <id>1</id>  
        <nome>Vinci Pegoretti Amorim</nome>   
        <email>vinci_amorim@yahoo.com.br</email>  
        <telefone>(37)3389-1994</telefone>  
    </Pessoa>
</list>

Cerjr, havia conseguido de uma forma um pouco mais complexa…

mas tentei fazer como vc falou que é bem mais simples…
não possui erro mais, porém está me retornando uma lista vazia, sabe o que pode estar acontecendo?

[quote=rafaels]
Cerjr, havia conseguido de uma forma um pouco mais complexa…

mas tentei fazer como vc falou que é bem mais simples…
não possui erro mais, porém está me retornando uma lista vazia, sabe o que pode estar acontecendo?[/quote]

cara, eu fiz uns testes aqui pra ver se tinha algum bug com o exemplo que eu te passei mas nos meus testes o código está funcionando…

eu vi no seu código postado anteriormente isso talvez o erro esteja ai…

XStream xstream = new XStream();  
try {              
     List<Pessoa> pessoas = (List<Pessoa>) xstream.fromXML(new FileReader(new File(nomeArq)));  
    
} catch (FileNotFoundException ex) {  
     Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);  
}      
return pessoa; 

vc recebe uma lista(pessoas), mas está retornando um objeto pessoa…

vc está iterando a lista para retornar a pessoa?

isso eu já tinha acertado…

o código está da seguinte forma…

[code]public List leXML(String nomeArq, ArrayList lista) {
// Configurando XStream
XStream xstream = new XStream();

    try {            
        
        List<Pessoa> pessoas = (List<Pessoa>) xstream.fromXML(new FileReader(new File(nomeArq)));
        
    } catch (FileNotFoundException ex) {
        Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
    }
    

    return lista;
    
}[/code]

O erro está no seu método, não está no XStream.
Vc está com um erro de lógica…

teste este código…

public List<Pessoa> leXML(String nomeArq) {  
	    // Configurando XStream       
	    XStream xstream = new XStream();  
	    List<Pessoa> pessoas = null;
	    try {              
	        pessoas = (List<Pessoa>) xstream.fromXML(new FileReader(new File(nomeArq)));  
	    } catch (FileNotFoundException ex) {  
	       Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);  
	    }  
	   return pessoas;  
	 }

pois é cara… vi aqui mesmo que eu tava viajando… hehehe

tinha acabado de arrumar…

valeu pela ajuda… brigadão…

beleza…
falow!!! 8)