XML - Ler o arquivo pronto com o XStream [RESOLVIDO]

8 respostas
F

Pessoal;
Bom dia!!

Consegui gerar um xml com o XStream:

<list>
  <bean.Cliente>
    <CliCod>000013</CliCod>
    <CliLoja>01</CliLoja>
    <CidCod>6383</CidCod>
    <UsuCod>033</UsuCod>
    <CliNome>TARCIS PAVANELLI EPP</CliNome>
    <CliLimiteCred>15200.0</CliLimiteCred>
    <CliTituloAberto>0.0</CliTituloAberto>
    <CliCondPag>14D</CliCondPag>
    <CliMediaAtraso>1.78</CliMediaAtraso>
  </bean.Cliente>
  <bean.Cliente>
    <CliCod>000180</CliCod>
    <CliLoja>01</CliLoja>
    <CidCod>6873</CidCod>
    <UsuCod>033</UsuCod>
    <CliNome>VALERIA VALOMINHO EPP</CliNome>
    <CliLimiteCred>10000.0</CliLimiteCred>
    <CliTituloAberto>0.0</CliTituloAberto>
    <CliCondPag>14D</CliCondPag>
    <CliMediaAtraso>4.25</CliMediaAtraso>
  </bean.Cliente>
  <bean.Cliente>
    <CliCod>000186</CliCod>
    <CliLoja>01</CliLoja>
    <CidCod>7017</CidCod>
    <UsuCod>033</UsuCod>
    <CliNome>DISTR. IMPERIAL LTDA </CliNome>
    <CliLimiteCred>31000.0</CliLimiteCred>
    <CliTituloAberto>0.0</CliTituloAberto>
    <CliCondPag>21D</CliCondPag>
    <CliMediaAtraso>14.71</CliMediaAtraso>
  </bean.Cliente>
</list>

Gostaria agora de ler o XML e popular em um objeto Cliente. Outra aplicação!

Poderiam me ajudar com isso? Lí alguns tutoriais mas não fui feliz!

Abraço à todos!

Marco Aurélio

8 Respostas

M

Qual código está usando para tentar ler o arquivo?

Ler é tão simples quanto gravar:

xstream.fromXml(xml)
F

Olá amigo;
Obrigado pela atenção.

Não estou usando nenhum código para ler o XML, talvez este deva ser o meu problema, como deveria fazer?

a sintaze que vc me passou:

xstream.fromXml(xml)

o xml seria uma String recebida a partir do arquivo lido?

Se puder me passar um pedaço de código de como ler o XML agradeceria.

Muito obrigado pelo dispor;

Tenha um excelente dia!

Marco A.

H

Coloca o xml que você gerou dentro de uma String assim

String xml = "seu xml aqui" ;

E pronto e só utilizar qual citaram acima.

F

Olá Hugo;
Boa Tarde!

Obrigado pela ajuda!

Tentei fazer de duas maneiras, observando um tutorial na net e outra como compreendi depois de sua dica.

try {
        FileInputStream stream = new FileInputStream("c:\\sim.xml");   
        InputStreamReader streamReader = new InputStreamReader(stream);   
        BufferedReader reader = new BufferedReader(streamReader); 
    
        XStream xstream = new XStream();
        Cliente cli = (Cliente)xstream.fromXML(streamReader);
    }
    catch (Exception ex) {
        JOptionPane.showMessageDialog(null, ex,"Informação",JOptionPane.INFORMATION_MESSAGE);
    }

Neste caso dá erro: Java.util.ArrayList cannot to be cast to bean.Cliente.

2º (conforme compreendi de seu post, acho que entendi errado pois ficou muito simples)

String xml = "c:\\sim.xml";
        XStream xstream = new XStream();
        Cliente cli = (Cliente)xstream.fromXML(xml);

Já neste caso dá o erro:

com.thoughtworks.xstream.io.StreamException: : only whitespace content allowed before start tag and not c (position: START_DOCUMENT seen c… @1:1)

Poderia, mais uma vez, me ajudar?

Obrigado!

Marco A.

H

Se é uma lista de Cliente o correto é fazer assim.

List<Cliente> list = new ArrayList<Cliente>(); list = xstream.from("xml");

O que eu disse foi isso.

String xml = "<list> <bean.Cliente> <CliCod>000013</CliCod> <CliLoja>01</CliLoja> <CidCod>6383</CidCod> <UsuCod>033</UsuCod> <CliNome>TARCIS PAVANELLI EPP</CliNome> <CliLimiteCred>15200.0</CliLimiteCred> <CliTituloAberto>0.0</CliTituloAberto> <CliCondPag>14D</CliCondPag> <CliMediaAtraso>1.78</CliMediaAtraso> </bean.Cliente> <bean.Cliente> <CliCod>000180</CliCod> <CliLoja>01</CliLoja> <CidCod>6873</CidCod> <UsuCod>033</UsuCod> <CliNome>VALERIA VALOMINHO EPP</CliNome> <CliLimiteCred>10000.0</CliLimiteCred> <CliTituloAberto>0.0</CliTituloAberto> <CliCondPag>14D</CliCondPag> <CliMediaAtraso>4.25</CliMediaAtraso> </bean.Cliente> <bean.Cliente> <CliCod>000186</CliCod> <CliLoja>01</CliLoja> <CidCod>7017</CidCod> <UsuCod>033</UsuCod> <CliNome>DISTR. IMPERIAL LTDA </CliNome> <CliLimiteCred>31000.0</CliLimiteCred> <CliTituloAberto>0.0</CliTituloAberto> <CliCondPag>21D</CliCondPag> <CliMediaAtraso>14.71</CliMediaAtraso> </bean.Cliente> </list> "

Essa String deve conter o conteúdo do seu xml. Acho que agora vai ficar um pouco mais claro.

F

fanama,

String xml = "c:\\sim.xml"; // <----------<< EU JÁ ACHO QUE O ERRO ESTÁ AQUI!!!
        XStream xstream = new XStream();
        Cliente cli = (Cliente)xstream.fromXML(xml);

Troque esta linha String xml = "c:\\sim.xml"; por String xml = "c://sim.xml"; só inverti as barras.

Assim também deve funcionar:

public Cliente createClient(String pathFile ) throws Exception {

      FileReader reader = new FileReader(new File(pathFile));

      Cliente cliente = (Cliente) xstream.fromXML(reader);

      return cliente;
}

USO: Cliente c = createClient("/repositorio/cliente.xml");
Espero ter ajudado.

flws

F

Pessoal;
Boa Tarde!

Depois de muuuuita luta acabei conseguindo, abaixo segue como resolvi.
Antes de mais nada, muito obrigado aos amigos que me auxiliaram!

Criei um método para ler o meu XML já gravado:

public Cliente[] createClient(String pathFile ) throws Exception {  
        XStream xstream = new XStream();
        ArrayList al = new ArrayList();
        
        FileReader reader = new FileReader(new File(pathFile));  
        al = (ArrayList) xstream.fromXML(reader);
        Cliente cli[] = (Cliente[])al.toArray(new Cliente[al.size()]);
        return cli;  
    }

Método para recuperar os valores do XML

try {
        Cliente[] c = createClient("c:\\sim.xml");

        for (int i = 0; i &lt; c.length; i++) {
            System.out.print(c[i].getCliCod());
            System.out.print(c[i].getCliNome());
            System.out.print(c[i].getUsuCod());
        }
        
    } catch (Exception ex) {
        System.out.println(ex);
    }

Abraço!

Marco A.

F

eu usaria digester.

Criado 4 de novembro de 2008
Ultima resposta 12 de nov. de 2008
Respostas 8
Participantes 5