Este post na verdade é uma simplificação do que fiz em Janeiro deste Ano, tendo em vista que algumas dúvidas surgiram em relação ao post original.
Link do post original: http://www.guj.com.br/java/261084-leitura-de-xml-de-nfe-com-jdom
import java.io.File;
import javax.swing.JOptionPane;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
/*
-
Desenvolvido por Fabiano Costa de Alvarenga
-
Esta classe recupera de um XML de NF-e, sem nameSpace, os
-
seguintes dados:
-
Tem como métodos:
-
getDestinatarioNFe() - String:destinatário
*/
public class LeitorXML {/*
- NF = /nfeProc/NFe/infNFe/ide/nNF
- Emissao = /nfeProc/NFe/infNFe/ide/dEmi
- Destinatario = /nfeProc/NFe/infNFe/dest/xNome
- E-mail = /nfeProc/NFe/infNFe/dest/email
- Chave NFe = /nfeProc/NFe/infNFe
- Emitente = /nfeProc/NFe/infNFe/Emit/xNome
*/
private SAXBuilder sb;
private Document d;public LeitorXML(String arquivo) { // TODO Auto-generated constructor stub try { sb = new SAXBuilder(); d = sb.build(new File(arquivo)); } catch (Exception e) { // TODO: handle exception JOptionPane.showMessageDialog(null, "Exceção ao processar arquivo! "+e.getMessage()); return; } }
// Crie um método get para cada elemento que queira extrair do xml. // Obs.: Existem outras formas mais elegantes de fazer, mas como eu não precisava // retornar todos os elementos do xml, e sim 5 informações apenas, por isso preferi fazer // desta forma. public String getDestinatarioNFe(){ try { XPath xPath = XPath.newInstance("//nfeProc/NFe/infNFe/dest/xNome"); Element node = (Element) xPath.selectSingleNode(d.getRootElement()); return node.getText(); } catch (Exception e) { System.out.println("Erro ao processar arquivo! "+e.getMessage()); return null; } } }
Segue abaixo a classe para testar o código acima.
public class Teste {
private static LeitorXML leitorXML;
public static void main(String[] args) {
leitorXML = new LeitorXML("C:/DevelopmentSystem/teste/src/xmlTeste.xml");
System.out.println("Nome do destinatário no XML: "+leitorXML.getDestinatarioNFe());
}
}
Pessoal, espero ter colaborado, qualquer dúvida fiquem a vontade para entrarem em contato.