Leitura de XML de nota fiscal Eletronica

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
claudioreiis01
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Ter, 25 Ago 2015 1:31 pm

Galera Boa tarde,
Estou precisando desenvolver uma procedure que leia vários xmls e insira em duas tabelas o cabeçalho e as linhas do xml , o meu problema esta sendo ler os itens pois quando tenho mais de um item ele não le os nós e da erro dizendo que retorna mais de um item.
Alguém poderia me ajudar como ler os items de uma nota lembrando que não vou fixar o xml na procedure e sim ler de um campo xmltype... pois o programa ira ler vários xmls ou seja os itens não serão fixos ou seja preciso que para cada item ele crie uma linha na tabela de items.

segue exemplo do xml que vou precisar ler:

Selecionar tudo

  <?xml version="1.0" encoding="UTF-8" ?> 
- <nfeProc versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe">
- <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
- <infNFe Id="NFe35150809005784000115550010000002301900200512" versao="3.10">
- <ide>
  <cUF>35</cUF> 
  <cNF>90020051</cNF> 
  <natOp>VENDA DE PROD IND</natOp> 
  <indPag>0</indPag> 
  <mod>55</mod> 
  <serie>1</serie> 
  <nNF>230</nNF> 
  <dhEmi>2015-08-24T17:27:00-03:00</dhEmi> 
  <dhSaiEnt>2015-08-25T00:00:00-03:00</dhSaiEnt> 
  <tpNF>1</tpNF> 
  <idDest>1</idDest> 
  <cMunFG>3550308</cMunFG> 
  <tpImp>1</tpImp> 
  <tpEmis>1</tpEmis> 
  <cDV>2</cDV> 
  <tpAmb>1</tpAmb> 
  <finNFe>1</finNFe> 
  <indFinal>0</indFinal> 
  <indPres>0</indPres> 
  <procEmi>3</procEmi> 
  <verProc>3.10.61</verProc> 
  </ide>
- <emit>
  <CNPJ>09005784000115</CNPJ> 
  <xNome>KISRA LTDA</xNome> 
  <xFant>R“CAL</xFant> 
- <enderEmit>
  <xLgr>RUA ADALBERT COUTO MAGALHąS JR</xLgr> 
  <nro>831</nro> 
  <xBairro>CENTRO</xBairro> 
  <cMun>3550308</cMun> 
  <xMun>são Paulo</xMun> 
  <UF>SP</UF> 
  <CEP>04542022</CEP> 
  <cPais>1058</cPais> 
  <xPais>BRASIL</xPais> 
  </enderEmit>
  <IE>149774511114</IE> 
  <CRT>3</CRT> 
  </emit>
- <dest>
  <CNPJ>19693295000157</CNPJ> 
  <xNome>DELPS  LTDA</xNome> 
- <enderDest>
  <xLgr>AV DAS NIN UNIDAS</xLgr> 
  <nro>4777</nro> 
  <xCpl>LOJA SVL01</xCpl> 
  <xBairro>JARDIM UNIVERSO</xBairro> 
  <cMun>3550318</cMun> 
  <xMun>são Paulo</xMun> 
  <UF>SP</UF> 
  <CEP>05477000</CEP> 
  <cPais>1058</cPais> 
  <xPais>BRASIL</xPais> 
  </enderDest>
  <indIEDest>1</indIEDest> 
  <IE>143222296116</IE> 
  </dest>
- <det nItem="1">
- <prod>
  <cProd>VND000623</cProd> 
  <cEAN /> 
  <xProd>PAO ITALIANO P - UN</xProd> 
  <NCM>19059090</NCM> 
  <CFOP>5101</CFOP> 
  <uCom>UN</uCom> 
  <qCom>60.0000</qCom> 
  <vUnCom>1.6000000000</vUnCom> 
  <vProd>96.00</vProd> 
  <cEANTrib /> 
  <uTrib>UN</uTrib> 
  <qTrib>60.0000</qTrib> 
  <vUnTrib>1.6000000000</vUnTrib> 
  <indTot>1</indTot> 
  </prod>
- <imposto>
- <ICMS>
- <ICMS20>
  <orig>0</orig> 
  <CST>20</CST> 
  <modBC>3</modBC> 
  <pRedBC>41.6700</pRedBC> 
  <vBC>56.00</vBC> 
  <pICMS>12.0000</pICMS> 
  <vICMS>6.72</vICMS> 
  </ICMS20>
  </ICMS>
- <PIS>
- <PISNT>
  <CST>07</CST> 
  </PISNT>
  </PIS>
- <COFINS>
- <COFINSNT>
  <CST>07</CST> 
  </COFINSNT>
  </COFINS>
  </imposto>
  </det>
- <det nItem="2">
- <prod>
  <cProd>EST1008020045</cProd> 
  <cEAN /> 
  <xProd>PAO CIABATTA - PCT 7 UN</xProd> 
  <NCM>19059090</NCM> 
  <CFOP>5101</CFOP> 
  <uCom>PCT</uCom> 
  <qCom>2.0000</qCom> 
  <vUnCom>11.2000000000</vUnCom> 
  <vProd>22.40</vProd> 
  <cEANTrib /> 
  <uTrib>PCT</uTrib> 
  <qTrib>2.0000</qTrib> 
  <vUnTrib>11.2000000000</vUnTrib> 
  <indTot>1</indTot> 
  </prod>
- <imposto>
- <ICMS>
- <ICMS20>
  <orig>0</orig> 
  <CST>20</CST> 
  <modBC>3</modBC> 
  <pRedBC>41.6700</pRedBC> 
  <vBC>13.07</vBC> 
  <pICMS>12.0000</pICMS> 
  <vICMS>1.57</vICMS> 
  </ICMS20>
  </ICMS>
- <PIS>
- <PISNT>
  <CST>07</CST> 
  </PISNT>
  </PIS>
- <COFINS>
- <COFINSNT>
  <CST>07</CST> 
  </COFINSNT>
  </COFINS>
  </imposto>
  </det>
- <total>
- <ICMSTot>
  <vBC>69.07</vBC> 
  <vICMS>8.29</vICMS> 
  <vICMSDeson>0.00</vICMSDeson> 
  <vBCST>0.00</vBCST> 
  <vST>0.00</vST> 
  <vProd>118.40</vProd> 
  <vFrete>0.00</vFrete> 
  <vSeg>0.00</vSeg> 
  <vDesc>0.00</vDesc> 
  <vII>0.00</vII> 
  <vIPI>0.00</vIPI> 
  <vPIS>0.00</vPIS> 
  <vCOFINS>0.00</vCOFINS> 
  <vOutro>0.00</vOutro> 
  <vNF>118.40</vNF> 
  <vTotTrib>0.00</vTotTrib> 
  </ICMSTot>
  </total>
- <transp>
  <modFrete>0</modFrete> 
- <transporta>
  <CNPJ>09005784000115</CNPJ> 
  <xNome>KISTON RESTAURANTES LTDA</xNome> 
  <IE>149774516114</IE> 
  <xEnder>RUA LEOPOLDO COUTO MAGALHąS</xEnder> 
  <xMun>são Paulo</xMun> 
  <UF>SP</UF> 
  </transporta>
  </transp>
- <infAdic>
  <infCpl>REDUȃO DA CARGA TRIBUTARIA EM 41,67% CONFORME DECRETO 50.071/05 ART. 1Ь ITEM XIV</infCpl> 
  </infAdic>
  </infNFe>
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
- <SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
- <Reference URI="#NFe35150809005784000115550010000002301900200512">
- <Transforms>
  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
  <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
  </Transforms>
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
  <DigestValue>1KS3ACeA4hqLZmb3zpBeB2pJPMI=</DigestValue> 
  </Reference>
  </SignedInfo>
  <SignatureValue>acDGnyM5nudJ9Vr75AUDkn7olHx5K3enJ//T/+Q7R327cpNbRs3un9vO38dk9zHqD0dwA88t1JS/ v6gcl/CJEN9/zkb3m2ACGQY1cR6huWuIIPcZQSvpYSWrjVdzH1NCjA21LPH/LQGP0PzLgBJOZ3Dz /ff47oZUKAgtg3KOUVs7qFFddi3UFgnRWQfsfnSTndUVRvnEubp2Va4iTh4zcOxvi/UZy/PGxrX0 LGhk2n19Usghgtrzg0iwzN/qNy/UIGmnG2DZlPVGQ1KtV0FKTAe5Vi9PXNfzUOxU8wm8OM7nQs4u EwaAa/KUU1YVhxH3QKQSFna3Ie4m08w17AuchQ==</SignatureValue> 
- <KeyInfo>
- <X509Data>
  <X509Certificate>MIIIRTCCBi2gAwIBAgIQZNRU0aN/uLREz6Tsex2SvTANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQG EwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRh IEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4X DTE1MDYxODAwMDAwMFoXDTE4MDYxNjIzNTk1OVowgegxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJ Q1AtQnJhc2lsMQswCQYDVQQIEwJTUDESMBAGA1UEBxQJU0FPIFBBVUxPMTYwNAYDVQQLFC1TZWNy ZXRhcmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsUDVJGQiBl LUNOUEogQTMxITAfBgNVBAsUGEF1dGVudGljYWRvIHBvciBBUiBBUlBFTjEwMC4GA1UEAxMnS0lT VE9OIFJFU1RBVVJBTlRFUyBMVERBOjA5MDA1Nzg0MDAwMTE1MIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAjfXFYME20wgIk9+NZ2BsfnTr1GrYa1qdc/nQMM3n3y71WxeZBTwKCjvCIlOn XBctIt2Lrg/WarOvsUbWVEjlfbefseH3Wc3R4pgasd6BV9c1u3bgEBm6OlwvHHG9jJZayEZjzt4q jE5j6NbbhXhn9/+6+xo5HFrRHM44cLqCPksHSNxrwWRk7nnNzJ/mFo7kTHq32Th0ycTxkfP0P1mr gVdzWg0cOOzFzhyyeDtgchDRpjYIGLB7ARXbdIEJ+lTFdvvEwFH+jU7PwkBA5hVJB7b7RpVGkcfc MHnDl7vtcez3GHActHCOG49nDNmfZnYZ/rxe8h78KX+EDJPR49X/jQIDAQABo4IDWDCCA1Qwgb0G A1UdEQSBtTCBsqA+BgVgTAEDBKA1BDMyNDA0MTk1Njk0NDgzODMzODA0MDAwMDAwMDAwMDAwMFJO RSBXNDM3MjM3LTJDR05SU1CgHgYFYEwBAwKgFQQTQU5HRUwgRE9NSU5HTyBURVNUQaAZBgVgTAED A6AQBA4wOTAwNTc4NDAwMDExNaAXBgVgTAEDB6AOBAwwMDAwMDAwMDAwMDCBHHBhdWxvLmhlbnJp cXVlQHJhc2NhbC5jb20uYnIwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUpdjQW VjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAwYwajBoBggrBgEFBQcCARZc aHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMvQUNfQ2Vy dGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWduX1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWg U4ZRaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUND ZXJ0aXNpZ25SRkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRy YWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0ZXN0Q1JMLmNy bDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2ln bi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG AQUFBwMEMIGbBggrBgEFBQcBAQSBjjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwu Y2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JG Ql9HNC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIwDQYJKoZI hvcNAQELBQADggIBALcSSZnkqZIIXEA0oULZ1NSUA9hx8pv/BhmQiyr1yo22hyESnlthOO7rB4pw Z7VPGB+OV3VzNfL9PPaywp98r0RsopfZqRktYn6YB7zz+Iofv8mhG/EI97E0EghI51o7+MLRnG9k Kbg23prS02ec8Do18l3rhtcwj41TA4nD5j3jZu4i5THSy6ik4/I/cur3A51sKsfBObEb1ZsrtaM1 L+6i6l2lPqj9ZPEUBGUvyCj4DPZowjmU92rHN0wYrezJTkTTkX1Rg36OIY8NLNmLlPQQmknAX9Ou a7UciIcYh3faRGLIIiqgaqljw/AWWLZtBcBOo5Ynf7Av4OZT9r2+I/ZilZZj/tVFyJ2MhDZol2wQ Vuzf1cu4HqB4GqFh6FkjyRGUgdQZEFxKZzMA8OQXLUtC0Wn1jCykxhk0gt5VsvrFSYYD2yWMneUC WSn5VnMZE7FmYqx7iwAYSpllpfT+U/xt31CWhCnIQlOl41D++HJwFTMGb4GeDzRVepwQrWNX7ZXY h04VjKGVS7BNNbxrOD+G5ivrlYWlbjVBmTvnjzszaOd3JT2OTe/TNtBAs3XZ8GVWW/tvGqn6OByk fKQiyWKqhtt5/WwN+t01+6HNUERHowrDya/e+rqEV9udeYlWN16kdPy0utay9gHr/6EwywiLuMrq DMxwPzLD9xI5gO4C</X509Certificate> 
  </X509Data>
  </KeyInfo>
  </Signature>
  </NFe>
- <protNFe versao="3.10">
- <infProt>
  <tpAmb>1</tpAmb> 
  <verAplic>SP_NFE_PL_008f</verAplic> 
  <chNFe>35150809005784000115550010000002301900200512</chNFe> 
  <dhRecbto>2015-08-24T17:30:47-03:00</dhRecbto> 
  <nProt>135150523568120</nProt> 
  <digVal>1KS3ACeA4hqLZmb3zpBeB2pJPMI=</digVal> 
  <cStat>100</cStat> 
  <xMotivo>Autorizado o uso da NF-e</xMotivo> 
  </infProt>
  </protNFe>
  </nfeProc>
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother,já pensou em utilizar um Parse chamando um método com XML aninhado com XMLType?

Selecionar tudo

SET serveroutput ON format wrapped;
DECLARE
  x XMLType := XMLType('  ...
claudioreiis01
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Ter, 25 Ago 2015 1:31 pm

Mas dessa forma eu não teria que colocar o xml dentro da procedure?.
o que eu preciso fazer seria ler um xml que esteja em um diretorio jogar para uma tabela tipo clob e assim ler o header e os itens essa seria a minha ideia... pois não sei fazer de outra forma, o meu problema é que eu estava usando o

Selecionar tudo

extractValue (conteudo, '/nfeProc/NFe/infNFe/emit/enderEmit/cMun', 'xmlns="http://www.portalfiscal.inf.br/nfe"')Campo
e isso ele não le quando tem mais de um item.

Você poderia me mostrar como seria utilizando este processo Parse?

Se puder agradeço
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Sim você pode usar XMLType na procedure como parâmetro retornando valores.
Seguinte você vai declarar as suas tags como parâmetros e chama na procedure ,esse é o processo do Parser.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 8 visitantes