Extrair lista de produtos do XML de uma NF-e

Gostaria de saber qual a melhor forma de extrair a lista de produtos (apenas código e quantidade) de um XML de uma NF-e, salvando cada item da lista em um novo objeto.

pega os schema de nfe, cria um pacote usando o xjc, ai usando jaxb, voce transforma o xml em objetos e em seguida, pega a tag onde estao os produtos e percorre ela num for.

eu ate postei outro dia aqui, o codigo que voce precisa sera parecido com esse, so vai precisar ver qual o objeto que estao os produtos.

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
	File diretorio = selecionarArquivoDaColeta(true);
	if (diretorio == null) {
		JOptionPane.showMessageDialog(this, "Arquivo nao selecionado ou nao encontrado.", "Erro ao selecionar arquivo", JOptionPane.ERROR_MESSAGE);
	} else {
		long t1 = System.currentTimeMillis();
		StringBuffer sb = new StringBuffer();
		File[] arquivos = diretorio.listFiles();
		try {
			//Retirei a criacao desses dois objetos do for. 
			JAXBContext contexto = JAXBContext.newInstance("br.inf.portalfiscal.nfe");
			Unmarshaller leituraXML = contexto.createUnmarshaller();
			for (File arquivo : arquivos) {
				if (!arquivo.getName().contains("caneve")) {
					JAXBElement<TNfeProc> objetoXML = (JAXBElement<TNfeProc>) leituraXML.unmarshal(arquivo);
					TNfeProc nfe = objetoXML.getValue();
					sb.append(nfe.getNFe().getInfNFe().getId().substring(3));
					sb.append("\tEMISSAO:\t");
					sb.append(LocalDate.parse(nfe.getNFe().getInfNFe().getIde().getDhEmi(), DateTimeFormatter.ISO_OFFSET_DATE_TIME));
					sb.append("\r\n");
					for (TNFe.InfNFe.Pag.DetPag pag : nfe.getNFe().getInfNFe().getPag().getDetPag()) {
						sb.append("PAGAMENDO:\t");
						sb.append(pag.getTPag());
						sb.append("\tVALOR:\t");
						sb.append(pag.getVPag());
						sb.append("\r\n");
					}
				}
			}
		} catch (JAXBException ex) {
			ex.printStackTrace();
		}
		System.out.println(sb);
	}
}
1 curtida

Deu certo, mas mudei o método para retornar o array de objeto. Obrigado.

1 curtida

tranquilo. esse meu foi para somar as notas emitidas, para conferencia com o valor da venda separando por finalizador. mas com esse esquema vc faz tudo na nfe. tando do xml para objeto como do objeto para o xml