Ajuda com JDom

6 respostas
P

Olá pessoal, desculpe se estou postando no lugar errado
Preciso ler um arquivo xml de retorno de um sofware, mais nao estou conseguindo. ficaria muito grato se alguem puder me ajudar
Sou novato no java, gostaria muiiito de uma ajudinha nesse codigo que encontrei:

File f = new File("C:/mural.xml");  
  
                        //Criamos uma classe SAXBuilder que vai processar o XML4  
org.jdom.input.SAXBuilder sb = new org.jdom.input.SAXBuilder();  
  
//Este documento agora possui toda a estrutura do arquivo.  
                org.jdom.Document d = null;  
                try {  
                    d = sb.build(f);  
                } catch (JDOMException ex) {  
                    Logger.getLogger(Assistec.class.getName()).log(Level.SEVERE, null, ex);  
                } catch (IOException ex) {  
                    Logger.getLogger(Assistec.class.getName()).log(Level.SEVERE, null, ex);  
                }  
  
   //Recuperamos o elemento root  
   org.jdom.Element mural = d.getRootElement();  
  
   //Recuperamos os elementos filhos (children)  
   List elements = mural.getChildren();  
   Iterator i = elements.iterator();  
  
   //Iteramos com os elementos filhos, e filhos do dos filhos  
   while (i.hasNext()) {  
      Element element = (Element) i.next();  
      System.out.println("Códido:"+ element.getChildText("cStat"));  
   }

Esse é o xml:

<?xml version="1.0" encoding="utf-8"?> <retAltConfUniNFe> <cStat>1</cStat> <xmotivo>Configuracao do UniNFe alterada com sucesso</xmotivo> </retAltConfUniNFe>

6 Respostas

E

Não gosto nem um pouco de usar getChildren e ficar varrendo os filhos. Eu prefiro usar XPath, que é semelhante a tratar o XML como se fosse listar uma árvore de diretórios.

Vou dar um exemplo com as classes que o Java já tem , sem usar o JDom ou outras coisas.

P

olá amigo, te agradeço muito a sua ajuda, assim que puder me mandar o exemplo lhe agradeço
Obrigado

E
package guj;

import java.io.FileInputStream;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class ExemploXPath {

    public void teste () throws Exception {
        InputStream xmlIstream = new FileInputStream ("c:/mural.xml");
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = builder.parse(xmlIstream);
        XPath xpath = XPathFactory.newInstance().newXPath();
        NodeList envList = (NodeList) xpath.evaluate("/retAltConfUniNFe/cStat", doc, XPathConstants.NODESET);
        for (int i = 0; i < envList.getLength(); ++i) {
            Element envElem = (Element) envList.item(i);
            System.out.println ("Codigo:" + envElem.getTextContent());
        }
        xmlIstream.close();
    }
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        ExemploXPath exp = new ExemploXPath();
        exp.teste();
    }

}

Note que o XPath lhe retorna uma lista exatamente com o que você quer (com apenas os elementos que estão sob “/retAltConfUniNFe/cStat”

Estude bem o XPath :slight_smile:

P

muito obrigado amigo, vou estudar aqui.

nel

entanglement:

Note que o XPath lhe retorna uma lista exatamente com o que você quer (com apenas os elementos que estão sob “/retAltConfUniNFe/cStat”

Estude bem o XPath :)

É bem útil mesmo. Petrick, podes usar o xStream ou o JAXB, que é nativo, para manipular seu XML também. Se existe um schema que define esse XML, isso lhe será bem útil.

Abraços.

P

Opa, estou com uma duvida aqui:

for (int i = 0; i < envList.getLength(); ++i) {
            Element envElem = (Element) envList.item(i);
            System.out.println ("Codigo:" + envElem.getTextContent());
        }

Está dando erro em: getLength, item, getTextContent
adicionei as bilbliotecas mais mesmo assim nao pede um tipo groovy.util.groovylist
o que pode ser??
obrigado

Criado 11 de junho de 2012
Ultima resposta 17 de jul. de 2012
Respostas 6
Participantes 3