Leitura de XML

9 respostas
Luciano_Lopes

Pessoal, preciso ler o xml da nfe, por enquanto estou conseguindo pegar os valores da tag "infNFe" mas não sei como fazer paga pegar os outros valores, o código que estou usando é esse:

File f = new File("c:/nfe.xml");  

   SAXBuilder sb = new SAXBuilder();  
  
   Document d = sb.build(f); 

   Element nota = d.getRootElement();  

   List elements = nota.getChildren(); 

   Iterator i = elements.iterator();  
  
   while (i.hasNext()) {  
      Element element = (Element) i.next(); 
      System.out.println("Versao:"+ element.getAttributeValue("versao"));  
      System.out.println("ID:"+ element.getAttributeValue("Id"));  
   }

9 Respostas

W

Luciano_Lopes,

fiz um artigo explicativo do uso do método SAX e sua vantagem em relação ao método DOM para leitura de XML.

O artigo está no link http://www.oracle2java.blogspot.com.br/2012/08/java-leitura-de-xml-com-sax.html.

Caso tenha dúvida após ler o artigo, torne a entrar em contato.

wiliamps

S

Da uma olhada no JaxB

http://www.mkyong.com/java/jaxb-hello-world-example/

http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Ftwbs_jaxbschema2java.html

Luciano_Lopes
wiliamps:
Luciano_Lopes,

fiz um artigo explicativo do uso do método SAX e sua vantagem em relação ao método DOM para leitura de XML.

O artigo está no link [url]http://www.oracle2java.blogspot.com.br/2012/08/java-leitura-de-xml-com-sax.html[/url].

Caso tenha dúvida após ler o artigo, torne a entrar em contato.

wiliamps
http://oracle2java.blogspot.com/

Estou tentando pegar o valor do ID mas ta vindo nulo:
SAXBuilder sb = new SAXBuilder();
        
        Document doc = sb.build(f);

        Element nota = doc.getRootElement();
  
        System.out.println("ID: " + nota.getAttributeValue("Id"));
W

Poste o conteudo do seu XML para eu verificar.

Luciano_Lopes

<NFe xmlns="http://www.portalfiscal.inf.br/nfe"> <infNFe Id="NFe35110906062933000190550010000000441739698166" versao="2.00"> <ide> <cUF>35</cUF> <cNF>73969816</cNF> <natOp>VENDA DE MERCADORIA</natOp> <indPag>1</indPag> <mod>55</mod> <serie>1</serie> <nNF>44</nNF> <dEmi>2011-09-09</dEmi> <dSaiEnt>2011-09-09</dSaiEnt> <tpNF>1</tpNF> <cMunFG>3548708</cMunFG> <tpImp>1</tpImp> <tpEmis>1</tpEmis> <cDV>6</cDV> <tpAmb>2</tpAmb> <finNFe>1</finNFe> <procEmi>3</procEmi> <verPr

W

Seu XML está com problemas do fechamento das tags. Tem que fechar todas de maneira correta.

Olha só isso:

Devia ser assim:

wiliamps

Luciano_Lopes

Ele fecha la no final, oque postei foi só o começo da nota. Se quiser te mando a nota toda para você poder testar,me passa teu email.

W

Se necessário, entre em contato pelo blog.

wiliamps

W

Luciano_Lopes,

para registro da solução aqui no GUJ, segue um modelo resumido para leitura do XML enviado por você.

Você tem um XML parecido com uma árvore de diretórios, por isso é mais complexo fazer funcionar, mas você vai entender com isso:

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class TestaXML {

    public static void main(String[] args) throws JDOMException, IOException {

        File f = new File("c:/temp/NFE.xml");

        SAXBuilder sb = new SAXBuilder();

        Document doc = sb.build(f);
       
        Element nfe = doc.getRootElement();

        // Retorna lista com infNFE e Signature
        List<Element> elements = nfe.getChildren();

        // Acessa direto infNFE(get(0)).ide(get(0)).elementos(getChildren())
        List<Element> ide = elements.get(0).getChildren().get(0).getChildren();

        System.out.println("Imprime IDE:");
        for (int i = 0; i < ide.size(); i++) {
            Element ideElement = ide.get(i);
            System.out.println(ideElement.getName() + ": " + ideElement.getValue());
        }
           
        System.out.println("-------------------------------------------------");   

        // Acessa direto infNFE(get(0)).emit(get(1)).elementos(getChildren())
        List<Element> emit = elements.get(0).getChildren().get(1).getChildren();
       
        System.out.println("Imprime EMIT:");
        for (int i = 0; i < emit.size(); i++) {
            Element emitElement = emit.get(i);
            System.out.println(emitElement.getName() + ": " + emitElement.getValue());
        }
           
        System.out.println("-------------------------------------------------");   
       
    }   

}

wiliamps

Criado 17 de fevereiro de 2013
Ultima resposta 18 de fev. de 2013
Respostas 9
Participantes 3