Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

List com dados do XML

Pessoal, bom dia.

Estou fazendo uma pequena aplicação desktop de controle de despesas para uso próprio, dessa forma aplico os estudos.Desenvolvi uma view para cadastrar as principais despesas. No painel superior estão os campos (classe modelo) e no inferior uma tabela que apresenta os cadastros. Estava utilizando Hibernate com banco de dados e o padrão MVC (funcionava normalmente). Após assistir as aulas do XStream quero mudar a aplicação e usar XML no lugar do banco.Estou gravando os cadastros no XML e alocando em uma pasta (C:\TesteXML...). Como fazer para ler os arquivos XML de uma determinada pasta e apresentar em uma Lista (List despesas = new ArrayList();) ?

Pela atenção, agradeço!

4 respostas

Oi Thiago,

Você pode fazer assim no código Java:

XStream xstream = new XStream(new DomDriver());
xstream.alias("despesa", Despesa.class);
List<Despesa> despesas = (List<Despesa>) 
FileInputStream inputStream = new FileInputStream(new File("/caminho/do/seu/xml"));
xstream.fromXML(inputStream);

E seu XML deve ter esse formato:

<list>
  <despesa>
    <id>1</id>
    <valor>900.00</valor>
  </despesa>
  <despesa>
    <id>2</id>
    <valor>1299.99</valor>
  </despesa>
</list>

Bons estudos!

Rodrigo, boa noite.

Não entendi o seu código! Terceira linha: Cast em que?

Voltando no meu problema: Tenho uma pasta com os arquivos, preciso ler os XML e adicionar as informações das tag's em uma lista para apresentar na view.

Tentei fazer dessa forma, porém deu erro.

XStream xstream = new XStream(new DomDriver());
        xstream.processAnnotations(Despesa.class);
        FileInputStream inputStream = new FileInputStream(new File("C:\\TesteXml\\teste.xml"));
        List<Despesa> despesas = (List<Despesa>) xstream.fromXML(inputStream);

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: modelo.Despesa cannot be cast to java.util.List

Por favor consegue me ajudar?! Obrigado!

solução!

Oi Thiago,

Perdão, o código que enviei estava com erro, essa seria a versão correta:

XStream xstream = new XStream(new DomDriver());
xstream.alias("despesa", Despesa.class);
FileInputStream inputStream = new FileInputStream(new File("/caminho/do/seu/xml"));
List<Despesa> despesas = (List<Despesa>) xstream.fromXML(inputStream);

No seu caso deu erro porque no seu arquivo XML deve ter apenas uma despesa e não uma lista de despesa.

O XML deve ter o formato que eu tinha enviado no código anterior:

<list>
  <despesa>
    <id>1</id>
    <valor>900.00</valor>
  </despesa>
  <despesa>
    <id>2</id>
    <valor>1299.99</valor>
  </despesa>
</list>

Repare no xml que as tags <despesa> estão envolvidas na tag <list>. Isso indica ao XStream que o XML contém uma lista de elementos.

Veja se consegue resolver agora.

Rodrigo, boa tarde.

Deu certo obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software