JAVA - Problema ao ler arquivo XML com JDON

5 respostas Resolvido
xmljava
A

Estou tentando fazer a leitura do seguinte XML com JDON:

<?xml version="1.0" encoding="UTF-8"?>
<registros>
    <referencia ano="2017">
        <bimestre>
            <nome> Bimestre</nome>
            <texto>algum texto 1</texto>
            <arquivo>Financeiras\LDO\LDO1.pdf</arquivo>
        </bimestre>
            
        <bimestre>
            <nome> Bimestre</nome>  
            <texto>algum texto 2</texto>
            <arquivo>Financeiras\LDO\LDO2.pdf</arquivo>
        </bimestre>
    </referencia>
        
    <referencia ano="2016">
        <bimestre>
            <nome> Bimestre</nome>
            <texto>algum texto 3</texto>
            <arquivo>Financeiras\LDO\LDO3.pdf</arquivo>
        </bimestre>
            
        <bimestre>
            <nome> Bimestre</nome>  
            <texto>algum texto 4</texto>
            <arquivo>Financeiras\LDO\LDO4.pdf</arquivo>
        </bimestre>
    </referencia>
 </registros>

O método que faz a leitura é esse:

private void montaDadosDataTable() throws JDOMException, IOException  {
        File f = new File(this.getArquivoXML()); //aqui eu busco o caminho do meu arquivo xml

        SAXBuilder builder = new SAXBuilder();

        Document doc = builder.build(f);

         Element root = (Element) doc.getRootElement();

        List objetos = root.getChildren();

        Iterator i = objetos.iterator();

        while (i.hasNext()) {
            Element obj = (Element) i.next();
            System.out.println("Referencia: "+obj.getAttributeValue("ano"));
            System.out.println("Bimestre: "+obj.getChild("bimestre").getChildText("nome") );
            System.out.println("Descrição: "+obj.getChild("bimestre").getChildText("texto") );
            System.out.println("Arquivo: "+obj.getChild("bimestre").getChildText("arquivo"));
            
            
        }
        
    }

O problema desse método é que ele so me mostra os dados do primeiro bimestre de cada referência, o que estou fazendo errado? Desde já agradeço…

5 Respostas

L

Eu chutaria que você precisa iterar sobre os elementos (childNodes) da referência. Mas, é um chute, não conheço jdom.

A

Teria como me mostrar como ficaria no código?

A

Ainda estou com esse problema, se alguem puder me ajudar…

L
Solucao aceita

Como eu te disse, nunca usei jdon (ou jdom).
Mas, olhando pela estrutura do teu xml, eu chutei o que disse antes.
Veja bem, dentro do teu root (a tag registros), você só tem a tag referencia.
Logo, não vejo sentido que funcione (afinal, você consegue acessar os dados do primeiro semestre) quando você coloca isso

while (i.hasNext()) {
        Element obj = (Element) i.next();
        System.out.println("Referencia: "+obj.getAttributeValue("ano"));
        System.out.println("Bimestre: "+obj.getChild("bimestre").getChildText("nome") );
        System.out.println("Descrição: "+obj.getChild("bimestre").getChildText("texto") );
        System.out.println("Arquivo: "+obj.getChild("bimestre").getChildText("arquivo"));
    }

Na minha porca experiência com xml e java, eu faria mais um cast ao ler o elemento e, então, faria uma nova iteração. Ressalto que não sei se funcionará

List objetos = root.getChildren();

Iterator i = objetos.iterator();

while (i.hasNext()) {
    Element obj = (Element) i.next();
    List children = obj.getChildren();
    Iterator it = children.iterator();
    System.out.println("Referencia: "+obj.getAttributeValue("ano"));
    while(it.hasNext()) {
        Element obj1 = (Element) it.next();
        System.out.println("Bimestre: "+obj1.getChildText("nome") );
        System.out.println("Descrição: "+obj1.getChildText("texto") );
        System.out.println("Arquivo: "+obj1.getChildText("arquivo"));
    }
}
A

Olá Luis, desculpe a demora para dar o retorno…
Realmente esse era o problema, era preciso fazer uma nova iteração sobre o elemento para que ele lesse os próximos bimestres. Obrigado!

Criado 23 de março de 2017
Ultima resposta 27 de mar. de 2017
Respostas 5
Participantes 2