Página 1 de 1

Leitura de XML Generico

Enviado: 24 Abr 2015 16:34
por mjuliao
Olá pessoal,

Eu estou precisando fazer uma "camada" de leitura de xml´s que me retorne um hash, mas já quebrei a cabeça e não estou conseguindo fazer da forma que eu gostaria.

Código: Selecionar todos

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<nivel1>
	<nivel2>
		<item1>A</item1>
		<item2>B</item2>
	</nivel2>
	<nivel2>
		<item1>C</item1>
		<item2>D</item2>
	</nivel2>
</nivel1>
E eu queria um retorno assim:

Código: Selecionar todos

{"nivel1"=>{1=>{"nivel2"=>{1=>{"item1"=>"A","item2"=>"B"},;
                           2=>{"item1"=>"C","item2"=>"D"}}}}}
Note que em caso de "nós" que possuem "filhos" (nivel1 e nivel2) a idéia é que exista um contador
E isso seria seria de forma que fosse independente da quantidade de niveis no xml.
Estou me enrolando no uso das classes TXmlNode, TXml Iterator e cia.
Desculpe a folga mas não sei mais o que fazer.

Obrigado a todos.

Leitura de XML Generico

Enviado: 27 Abr 2015 11:47
por mjuliao
Olá pessoal, depois de gastar muito tempo com essa minha questão e relatar aqui, continuei tentando e para minha felicidade cheguei ao resultado.
Creio que esta rotina pode ser util para alguem.

Código: Selecionar todos

Function Main( cArquivo )
hteste := XmltoHash( MemoRead( if( cArquivo == Nil,"t.xml",cArquivo) ) )
return nil

Function XmlToHash( cStringXml )
/***
* Le qualquer string xml e retorn um Hash
*
*/
   LOCAL cTelaAnt := Gt()
   LOCAL hHash := {=>}
   LOCAL oXmlDoc := TXmlDocument():new( cStringXml )
   Local oNode
   if oXmlDoc:nStatus = 1 .and. !empty( oXmlDoc )
      oNode := oXmlDoc:FindFirst()
      if oNode:cName == "xml"
         oNode := oxmldoc:oroot:ochild:onext
      endif
      hHash := NodeToHash( oNode )
   else
      Alert( "Erro nr. "+StrTrim( oXmlDoc:nStatus )+"-"+oXmlDoc:ErrorMsg+" ao ler xml",,,15 )
   endif
   Return hHash

Function NodeToHash( oNode )
Local cName, xData, hHash := {=>}
while oNode # Nil
   cName := Upper( oNode:cName )
   xData := oNode:cData
   if oNode:oChild # nil
      xData := NodeToHash( oNode:oChild )
      IF !HHasKey( hHash, cName )
        hHash += { cName => {=>} }
      endif
      hHash[ cName ] += { Len( hHash[ cName ] ) +1 => xData }
   else
      hHash += { cName => xData }
   endif
   oNode := oNode:oNext()
enddo
Return hHash
Abração :))

Leitura de XML Generico

Enviado: 27 Abr 2015 17:40
por fladimir
Vlw

Leitura de XML Generico

Enviado: 29 Abr 2015 01:52
por rochinha
Amiguinhos,

Interessante e esta dica deveria fazer parte da sessão Dicas e Contribuições e poderia se chamar de MJSON, já que passa esta impressão e as iniciais são idênticas(MJuliao), ha, ha, ha.

Leitura de XML Generico

Enviado: 11 Mai 2015 10:33
por sambomb
Como poderia rodar o Hash gerado em loop para pegar as informações dos niveis mais baixos??

Tenho esse XML e queria poder pegar os atributos de cada segmento e jogar em uma matriz multidimensional

Código: Selecionar todos

<?xml version="1.0" encoding="ISO-8859-1" ?>
<tributacoes>
    <segmento>
        <detalhes>
            <ncm>2501.00.20</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>191</idSegmento>
            <nomeSegmento>Sal Refinado</nomeSegmento>
            <descricaoNcm>Sal de mesa</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>07/02/2013 10:56</dtCadastro>
            <dtUltimaAtualizacao>03/04/2013 14:15</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>0.00</icmsSaida>
            <icmsSituacao>Isento/Alíquota Zero</icmsSituacao>
            <icmsCstSaida>040</icmsCstSaida>
            <icmsLeiSaida>Lei 4892/2006</icmsLeiSaida>
            <icmsLeiLinkSaida>http://alerjln1.alerj.rj.gov.br/CONTLEI.NSF/0/797b7f8a3063a4d78325721f006764da?OpenDocument</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST> </subItemST>
            <mvaInterno>0.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 32.161 de 2002</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/portal/index.portal?_nfpb=true&_pageLabel=tributaria&file=/legislacao/tributaria/decretos/2002/32161.shtml</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
    <segmento>
        <detalhes>
            <ncm>2201.90.00</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>1467</idSegmento>
            <nomeSegmento>Gelo</nomeSegmento>
            <descricaoNcm>Outros gelo e neve</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>25/10/2013 16:48</dtCadastro>
            <dtUltimaAtualizacao>25/10/2013 16:48</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>0.00</icmsSaida>
            <icmsSituacao>ST - Substituição Tributária</icmsSituacao>
            <icmsCstSaida>060</icmsCstSaida>
            <icmsLeiSaida>ITEM 34,  Livro II, Anexo I,RICMS RJ</icmsLeiSaida>
            <icmsLeiLinkSaida>http://www.fazenda.rj.gov.br/portal/index.portal?_nfpb=true&_pageLabel=tributaria&file=/legislacao/tributaria/decretos/2000/ricms/index_livro_II.shtml</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST>1.5</subItemST>
            <mvaInterno>70.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 39.855/2006</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/sefaz/faces/oracle/webcenter/portalapp/pages/navigation-renderer.jspx?_afrLoop=118327526224000&datasource=UCMServer%23dDocName%3A81207&_adf.ctrl-state=lzncd73uj_32</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
    <segmento>
        <detalhes>
            <ncm>1905.90.90</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>361</idSegmento>
            <nomeSegmento>Alfajor</nomeSegmento>
            <descricaoNcm>(Tributado) Outros - Produtos de padaria, pastelaria ou da indústria de bolachas e biscoitos, mesmo adicionados de cacau e produtos semelhantes.</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>15/02/2013 11:49</dtCadastro>
            <dtUltimaAtualizacao>05/07/2014 13:09</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>19.00</icmsSaida>
            <icmsSituacao>Tributado</icmsSituacao>
            <icmsCstSaida>000</icmsCstSaida>
            <icmsLeiSaida>Lei 2.657, Artigo 14, Inciso I</icmsLeiSaida>
            <icmsLeiLinkSaida>http://alerjln1.alerj.rj.gov.br/contlei.nsf/f25edae7e64db53b032564fe005262ef/01cc04eee53b3b30032564fb005c2ddf?OpenDocument</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST> </subItemST>
            <mvaInterno>0.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 39.855/2006</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/sefaz/faces/oracle/webcenter/portalapp/pages/navigation-renderer.jspx?_afrLoop=118327526224000&datasource=UCMServer%23dDocName%3A81207&_adf.ctrl-state=lzncd73uj_32</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
    <segmento>
        <detalhes>
            <ncm>1905.90.90</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>23</idSegmento>
            <nomeSegmento>Bolo</nomeSegmento>
            <descricaoNcm>(Tributado) Outros - Produtos de padaria, pastelaria ou da indústria de bolachas e biscoitos, mesmo adicionados de cacau e produtos semelhantes.</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>15/01/2013 15:47</dtCadastro>
            <dtUltimaAtualizacao>24/02/2015 11:23</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>19.00</icmsSaida>
            <icmsSituacao>Tributado</icmsSituacao>
            <icmsCstSaida>000</icmsCstSaida>
            <icmsLeiSaida>Lei 2.657, Artigo 14, Inciso I</icmsLeiSaida>
            <icmsLeiLinkSaida>http://alerjln1.alerj.rj.gov.br/contlei.nsf/f25edae7e64db53b032564fe005262ef/01cc04eee53b3b30032564fb005c2ddf?OpenDocument</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST> </subItemST>
            <mvaInterno>0.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 39.855/2006</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/sefaz/faces/oracle/webcenter/portalapp/pages/navigation-renderer.jspx?_afrLoop=118327526224000&datasource=UCMServer%23dDocName%3A81207&_adf.ctrl-state=lzncd73uj_32</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
    <segmento>
        <detalhes>
            <ncm>1905.90.90</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>1292</idSegmento>
            <nomeSegmento>Palitos (de Chocolate)</nomeSegmento>
            <descricaoNcm>(Tributado) Outros - Produtos de padaria, pastelaria ou da indústria de bolachas e biscoitos, mesmo adicionados de cacau e produtos semelhantes.</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>13/09/2013 10:58</dtCadastro>
            <dtUltimaAtualizacao>11/02/2015 17:58</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>19.00</icmsSaida>
            <icmsSituacao>Tributado</icmsSituacao>
            <icmsCstSaida>000</icmsCstSaida>
            <icmsLeiSaida>Lei 2.657, Artigo 14, Inciso I</icmsLeiSaida>
            <icmsLeiLinkSaida>http://alerjln1.alerj.rj.gov.br/contlei.nsf/f25edae7e64db53b032564fe005262ef/01cc04eee53b3b30032564fb005c2ddf?OpenDocument</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST> </subItemST>
            <mvaInterno>0.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 39.855/2006</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/sefaz/faces/oracle/webcenter/portalapp/pages/navigation-renderer.jspx?_afrLoop=118327526224000&datasource=UCMServer%23dDocName%3A81207&_adf.ctrl-state=lzncd73uj_32</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
    <segmento>
        <detalhes>
            <ncm>1905.90.90</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>1138</idSegmento>
            <nomeSegmento>Pão de Mel (biscoito)</nomeSegmento>
            <descricaoNcm>(Tributado) Outros - Produtos de padaria, pastelaria ou da indústria de bolachas e biscoitos, mesmo adicionados de cacau e produtos semelhantes.</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>07/08/2013 12:05</dtCadastro>
            <dtUltimaAtualizacao>07/07/2014 16:10</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>19.00</icmsSaida>
            <icmsSituacao>Tributado</icmsSituacao>
            <icmsCstSaida>000</icmsCstSaida>
            <icmsLeiSaida>Lei 2.657, Artigo 14, Inciso I</icmsLeiSaida>
            <icmsLeiLinkSaida>http://alerjln1.alerj.rj.gov.br/contlei.nsf/f25edae7e64db53b032564fe005262ef/01cc04eee53b3b30032564fb005c2ddf?OpenDocument</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST> </subItemST>
            <mvaInterno>0.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 39.855/2006</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/sefaz/faces/oracle/webcenter/portalapp/pages/navigation-renderer.jspx?_afrLoop=118327526224000&datasource=UCMServer%23dDocName%3A81207&_adf.ctrl-state=lzncd73uj_32</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
    <segmento>
        <detalhes>
            <ncm>1905.90.90</ncm>
            <ncm_ex> </ncm_ex>
            <idSegmento>1445</idSegmento>
            <nomeSegmento>Pão de Mel (Bolacha)</nomeSegmento>
            <descricaoNcm>(Tributado) Outros - Produtos de padaria, pastelaria ou da indústria de bolachas e biscoitos, mesmo adicionados de cacau e produtos semelhantes.</descricaoNcm>
            <tipoProduto>sem ean</tipoProduto>
            <observacao> </observacao>
            <dtCadastro>24/10/2013 09:54</dtCadastro>
            <dtUltimaAtualizacao>28/06/2014 19:47</dtUltimaAtualizacao>
        </detalhes>
        <saida>
            <icmsSaida>19.00</icmsSaida>
            <icmsSituacao>Tributado</icmsSituacao>
            <icmsCstSaida>000</icmsCstSaida>
            <icmsLeiSaida>Lei 2.657, Artigo 14, Inciso I</icmsLeiSaida>
            <icmsLeiLinkSaida>http://alerjln1.alerj.rj.gov.br/contlei.nsf/f25edae7e64db53b032564fe005262ef/01cc04eee53b3b30032564fb005c2ddf?OpenDocument</icmsLeiLinkSaida>
            <ipi>0.00</ipi>
        </saida>
        <entrada>
            <ufDestino>RJ</ufDestino>
            <subItemST> </subItemST>
            <mvaInterno>0.00</mvaInterno>
            <mvaExterno>0.00</mvaExterno>
            <mvaImportado>0.00</mvaImportado>
            <baseReduzida>0.00</baseReduzida>
            <icmsInterno>19.00</icmsInterno>
            <icmsLeiInterno>Decreto 39.855/2006</icmsLeiInterno>
            <icmsLeiLinkInterno>http://www.fazenda.rj.gov.br/sefaz/faces/oracle/webcenter/portalapp/pages/navigation-renderer.jspx?_afrLoop=118327526224000&datasource=UCMServer%23dDocName%3A81207&_adf.ctrl-state=lzncd73uj_32</icmsLeiLinkInterno>
            <icmsAtacadoAC>12.00</icmsAtacadoAC>
            <icmsIndustriaAC>12.00</icmsIndustriaAC>
            <icmsAtacadoAL>12.00</icmsAtacadoAL>
            <icmsIndustriaAL>12.00</icmsIndustriaAL>
            <icmsAtacadoAM>12.00</icmsAtacadoAM>
            <icmsIndustriaAM>12.00</icmsIndustriaAM>
            <icmsAtacadoAP>12.00</icmsAtacadoAP>
            <icmsIndustriaAP>12.00</icmsIndustriaAP>
            <icmsAtacadoBA>12.00</icmsAtacadoBA>
            <icmsIndustriaBA>12.00</icmsIndustriaBA>
            <icmsAtacadoCE>12.00</icmsAtacadoCE>
            <icmsIndustriaCE>12.00</icmsIndustriaCE>
            <icmsAtacadoDF>12.00</icmsAtacadoDF>
            <icmsIndustriaDF>12.00</icmsIndustriaDF>
            <icmsAtacadoES>12.00</icmsAtacadoES>
            <icmsIndustriaES>12.00</icmsIndustriaES>
            <icmsAtacadoGO>12.00</icmsAtacadoGO>
            <icmsIndustriaGO>12.00</icmsIndustriaGO>
            <icmsAtacadoMA>12.00</icmsAtacadoMA>
            <icmsIndustriaMA>12.00</icmsIndustriaMA>
            <icmsAtacadoMG>12.00</icmsAtacadoMG>
            <icmsIndustriaMG>12.00</icmsIndustriaMG>
            <icmsAtacadoMS>12.00</icmsAtacadoMS>
            <icmsIndustriaMS>12.00</icmsIndustriaMS>
            <icmsAtacadoMT>12.00</icmsAtacadoMT>
            <icmsIndustriaMT>12.00</icmsIndustriaMT>
            <icmsAtacadoPA>12.00</icmsAtacadoPA>
            <icmsIndustriaPA>12.00</icmsIndustriaPA>
            <icmsAtacadoPB>12.00</icmsAtacadoPB>
            <icmsIndustriaPB>12.00</icmsIndustriaPB>
            <icmsAtacadoPE>12.00</icmsAtacadoPE>
            <icmsIndustriaPE>12.00</icmsIndustriaPE>
            <icmsAtacadoPI>12.00</icmsAtacadoPI>
            <icmsIndustriaPI>12.00</icmsIndustriaPI>
            <icmsAtacadoPR>12.00</icmsAtacadoPR>
            <icmsIndustriaPR>12.00</icmsIndustriaPR>
            <icmsAtacadoRJ>19.00</icmsAtacadoRJ>
            <icmsIndustriaRJ>19.00</icmsIndustriaRJ>
            <icmsAtacadoRN>12.00</icmsAtacadoRN>
            <icmsIndustriaRN>12.00</icmsIndustriaRN>
            <icmsAtacadoRO>12.00</icmsAtacadoRO>
            <icmsIndustriaRO>12.00</icmsIndustriaRO>
            <icmsAtacadoRR>12.00</icmsAtacadoRR>
            <icmsIndustriaRR>12.00</icmsIndustriaRR>
            <icmsAtacadoRS>12.00</icmsAtacadoRS>
            <icmsIndustriaRS>12.00</icmsIndustriaRS>
            <icmsAtacadoSC>12.00</icmsAtacadoSC>
            <icmsIndustriaSC>12.00</icmsIndustriaSC>
            <icmsAtacadoSE>12.00</icmsAtacadoSE>
            <icmsIndustriaSE>12.00</icmsIndustriaSE>
            <icmsAtacadoSP>12.00</icmsAtacadoSP>
            <icmsIndustriaSP>12.00</icmsIndustriaSP>
            <icmsAtacadoTO>12.00</icmsAtacadoTO>
            <icmsIndustriaTO>12.00</icmsIndustriaTO>
        </entrada>
        <federal>
            <piscofinsSituacao>Tributado</piscofinsSituacao>
            <piscofinsCstEntrada>50</piscofinsCstEntrada>
            <piscofinsCstSaida>01</piscofinsCstSaida>
            <pisEntrada>1.650</pisEntrada>
            <cofinsEntrada>7.600</cofinsEntrada>
            <pisSaida>1.650</pisSaida>
            <cofinsSaida>7.600</cofinsSaida>
            <piscofinsLei> </piscofinsLei>
            <piscofinsLeiLink> </piscofinsLeiLink>
            <piscofinsNatRec> </piscofinsNatRec>
        </federal>
        <tipoLista> </tipoLista>
    </segmento>
        <excecoes>
        <excecaoEstado>
            <excecaoUF>ES</excecaoUF>
            <excecaoNome>beneficio</excecaoNome>
            <excecaoAtacado>1.00</excecaoAtacado>
            <excecaoIndustria>12.00</excecaoIndustria>
        </excecaoEstado>
    </excecoes>
    <importados>
        <aliquotaInterestadual>4.00</aliquotaInterestadual>
        <prefixo num="1">Estrangeira - Importação direta, exceto a indicada no código 6</prefixo>
        <prefixo num="2">Estrangeira - Adquirida no mercado interno, exceto a indicada no código 7</prefixo>
        <prefixo num="6">Estrangeira - Importação direta, sem similar nacional, constante em lista de Resolução CAMEX (vide Resolução Camex 79/2012)</prefixo>
        <prefixo num="7">Estrangeira - Adquirida no mercado interno, sem similar nacional, constante em lista de Resolução CAMEX (vide Resolução Camex 79/2012)</prefixo>
    </importados>
    <totalSegmentos>63</totalSegmentos>
    <dtSolicitacao>08/05/2015 15:57</dtSolicitacao>
    <chaveControle>c87783e2bf362d</chaveControle>
</tributacoes>

Leitura de XML Generico

Enviado: 11 Mai 2015 14:22
por rochinha
Amiguinho,

Conforme o arquivo que voce postou dá para identificar que a necessidade de se obter cada resultado pode ser obtido através identação do código.

A identação trabalha somando um contador a cada vez que se inicia uma tag e reduzindo este contador a cada vez que ele fecha.

E como produzir um contador destes para nivelar? Em primeiro lugar precisamos encontrar um algo que seja padrão. Em HTML ou XML encontramos o padrão "<" para inicio da tag e "</".

Não é uma regra mas as vezes encontramos algo como "</>". Abreviações que eu vejo como trabalho preguiçoso, mas que podemos identificar como NADA, ou perda de tempo de processamento e fósforo.

voltando à sua dúvida, veja um exemplo postado a zilhões de anos de nosso amigo TOYA:

Código: Selecionar todos

/*
   
   * INDENTAK - Indentador alem dos 64Kb
   * toya Analista de Sistemas
   * toya@ieg.com.br
   * http://www.toya.hpg.com.br/

Compilar 
  Clipper indentak
  Rtlink fi indentak
  

*/

parameters mascara

if type("mascara")="U"
   ? "Indentador de arquivos HTML"
   ?
   ? "Sintaxe:"
   ?
   ? "   indentak seuarquivo.HTML"
   ?
   ? "Tamanho m ximo do arquivo:"
   ?
   ? "   ????????  kbytes"
   ?
   quit
endif
vet := directory(mascara)
clea
for n = 1 to len(vet)
   nomearq := vet[n, 1]
   rename (nomearq) to indentak.tmp
   fd := fcreate(nomearq,0)
   if fd = -1
      ? 'Erro na criacao do arquivo '+nomearq
      inkey(0)
      rename indentak.tmp to (nomearq) 
      loop
   endi
   dente := 3
   m_a001 := {}                              
   aadd(m_a001,{'db_detalhe','C',250,00})
   f_prn := 'indentak.$db'
   dbcreate('&f_prn',m_a001)
   use &f_prn new exclu alias db_relatorio
   appe from indentak.tmp sdf     
   nl := reccount()
   es := 0
   dbgotop()   
   for a = 1 to nl
      go a
      linha := alltrim(db_detalhe)
      linha2 := ""
      if len(linha) # 0
         pedaco := upper(substr(linha, 1, 4))
         if pedaco="</UL" .or. pedaco="</TD" .or. pedaco="</TR"
            es := es - dente
         endif
         pedaco := upper(substr(linha, 1, 5))
         if pedaco="</DIV" // pedaco="</IMG" .or. 
            es := es - dente
         endif
         pedaco := upper(substr(linha, 1, 6))
         if pedaco="</HEAD" .or. pedaco="</BODY"
            es := es - dente
         endif
         pedaco := upper(substr(linha, 1, 7))
         if pedaco="</TABLE" .or. pedaco="</TBODY"
            es := es - dente
         endif

         linha2 := space(es) + linha
         pedaco := upper(substr(linha, 1, 3))
         if pedaco="<UL" .or. pedaco="<TD" .or. pedaco="<TR"
            es := es + dente
         endif
         pedaco := upper(substr(linha, 1, 4))
         if pedaco="<DIV" // pedaco="<IMG" .or. 
            es := es + dente
         endif
         pedaco := upper(substr(linha, 1, 5))
         if pedaco="<HEAD" .or. pedaco="<BODY"
            es := es + dente
         endif
         pedaco := upper(substr(linha, 1, 6))
         if pedaco="<TABLE" .or. pedaco="<TBODY"
            es := es + dente
         endif
      endif
      ? linha2
      buffer := linha2 + chr(13) + chr(10)
      fwrite(fd, buffer, Len(buffer))   
   next a
   fclose(fd)
   ferase('indentak.tmp')
   ferase('indentak.$db')
next n
quit
Veja que ele utiliza padrão para o tratamento do código.

Tá mais voce falou em HASH, e estou falando em STRINGS e COMPARAÇÕES, mas HASH é isto. É a comparação de um dado de tamanho variável, mas quando encontrado de dá um ponto de partida ou inicio.

Tá mas um XML é parecido com um PLANO DE CONTAS, ééééééh! Cada nivel do plano de contas é escalonado portando ao encontrar "<", "<" e "<" tres vezes seguidas quer dizer que o ultimo é nivel 3 e, ou se encontra outro "<" para o nivel quatro ou encontra-se o "</" para voltar o contador ao nivel 2.

Voltando ao seu XML, vou mostrar como lê-lo usando DOM objects, que é o que eu uso:

Código: Selecionar todos

   // Usa motor XML da Microsoft
   oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM")
   oXMLDoc:async := .f. 

   lSuccess := oXMLDoc:load( cEDXFile )

   if lSuccess // se abriu com sucesso...

      // Cria objeto principal
      oteste := oXMLDoc:getElementsByTagName( "infNFe" )
	  
      // Captura informacoes de identificacao	  
      M->fileNFE    := cFileName(cEDXFile)
      M->PROTOCOLO  :=     CriticaTagName( "nProt", oXMLDoc, cXMLDoc )   // protocolo previamente incluso
      M->MOTIVO     :=     CriticaTagName( "xMotivo", oXMLDoc, cXMLDoc ) // motivo ou situacao do arquivo
      M->NFENUM     := val(CriticaTagName( "nNF", oXMLDoc, cXMLDoc ))    // numero da nota fiscal eletronica
      M->IDNATUREZA := val(CriticaTagName( "CFOP", oXMLDoc, cXMLDoc ))   // codigo de natureza de operacao
      M->NATUREZA   :=     CriticaTagName( "natOp", oXMLDoc, cXMLDoc )   // descritivo da natureza de operacao

      // Captura dados do destinatario
      if _tipo_ = "E"
          xDestEmit     := oXMLDoc:getElementsByTagName( "emit" )
      else
          xDestEmit     := oXMLDoc:getElementsByTagName( "dest" )
      endif
      // Pega XML do trecho
      cXMLDestEmit := xDestEmit:Item(0):xml
Veja que utilizo ...:getElementsByTagName onde busco por nome da TAG o seu conteúdo que pode ser um trecho string ou um nivel interno de XML.

Na variável xDestEmit, peguei tudo contido na TAG "emit", xDestEmit := oXMLDoc:getElementsByTagName( "emit" ) e logo depois posso trabalhar com todo o conteúdo resultante, em formato XML, cXMLDestEmit := xDestEmit:Item(0):xml

Tudo bem Rochinha, mas se eu tiver mais de um nó dentro de outro nó? Bastará obter a contagem de sub-nós:

Código: Selecionar todos

      xProds := oXMLDoc:getElementsByTagName( "det" )
      for iProds = 1 to xProds:length // length retorna quantidade a contar
          // Pega o conteúdo de cada TAG contida dentro do nó.
          oTAGProd    := oXMLDoc:getElementsByTagName( "prod" )      
          oTAGImposto := oXMLDoc:getElementsByTagName( "imposto" )      
          oTAGPIS     := oXMLDoc:getElementsByTagName( "PIS" )      
          oTAGCOFINS  := oXMLDoc:getElementsByTagName( "COFINS" )      
Veja que xProds:length me retornou o numero de nós internos da TAG "det" e se dentro dela ainda contiver outros nós com sub-nós bastará trabalhar cada um.

É um trabalho difícl, mas saboroso.

Talvez, isto lhe sirva de modelo, já que em se tratando de uso da HBXML e HASH não encontrei nenhum código que me fosse alusivo a ponto de mudar meus paradigmas.

Leitura de XML Generico

Enviado: 11 Mai 2015 16:14
por sambomb
Muito obrigado pela resposta Rochinha, Toya trabalha para a mesma empresa que eu, mas como ele está de férias ( merecidas ) estou apelando para os demais universitários...

Tem como postar um xml de exemplo, que possa ser utilizado em conjunto com seu código?

Vou dar uma estudada no "XMLDOM" parece que vai me servir, a endentação é relativamente simples.

Leitura de XML Generico

Enviado: 11 Mai 2015 18:46
por rochinha
Amiguinhos,

sambomb,
Veja no tópico EDX - Seus sistemas conversando entre si, facilmente... o uso de uma pequena classe de um amigo do forum fivewin internacional e um arquivo de header que criei para tornar mais bonita a escrita de nossos .XMLs.

Neste caso duas APIs são usadas, XMLHTTP e XMLDOM.

Uma boa dica de como fazer estes usos.