21 Replies Latest reply: Feb 23, 2018 1:19 PM by Thiago Justen Teixeira RSS

    Extraindo campos de tags XML

    Thiago Justen Teixeira

      Srs,

       

      Estou com uma dúvida acerca de qual seria a melhor solução para a minha questão que segue:

       

      Tenho um app que captura os xml's de notas fiscais de abastecimento e os "traduz" conforme script abaixo:

       

      LOAD "XML",

      TextBetween(XML,'KM:','.') as [NFe Abast - KM],

              TextBetween(XML,'PLACA:','KM:') as [NFe Abast - Placa],

              TextBetween(XML,'<chNFe>','</chNFe>') as [NFe Abast - Chave de Acesso],

              TextBetween(XML,'<vUnCom>','</vUnCom>') as [NFe Abast - Valor Unitario],

              len(TextBetween(XML,'<vUnCom>','</vUnCom>'))    as [Nfe Abast - Un. Medida],

              TextBetween(XML,'<vProd>','</vProd>') as [NFe Abast - Valor Total],

              TextBetween(XML,'<uCom>','</uCom>') as [NFe Abast - Un Medida],

              TextBetween(XML,'<xProd>','</xProd>') as [NFe Abast - Produto],

              TextBetween(XML,'<nNF>','</nNF>') as [NFe Abast - Numero],

              TextBetween(XML,'<xNome>','</xNome>') as [NFe Abast - Emitente Razao Social],

              TextBetween(XML,'<xFant>','</xFant>') as [NFe Abast - Emitente Nome Fantasia],

              TextBetween(XML,'<qCom>','</qCom>') as [NFe Abast - Quantidade],

              date(SubField(TextBetween(XML,'<dhEmi>','</dhEmi>'),'T',1)) as [NFe Abast - Data Emissao],

              Year((SubField(TextBetween(XML,'<dhEmi>','</dhEmi>'),'T',1))) as [NFe Abast - Ano Emissao],

              Month((SubField(TextBetween(XML,'<dhEmi>','</dhEmi>'),'T',1))) as [NFe Abast - Mes Emissao],

              Day((SubField(TextBetween(XML,'<dhEmi>','</dhEmi>'),'T',1))) as [NFe Abast - Dia Emissao],

              Time(SubField(SubField(TextBetween(XML,'<dhEmi>','</dhEmi>'),'T',2),'-',1),'hh:mm') as [NFe Abast - Hora Emissao],

              TextBetween(XML,'<xMotivo>','</xMotivo>') as [NFe Abast - Status]

      FROM [lib://CARGA/NOTAS_ABASTECIMENTO.qvd](qvd);

       

      Até aí tudo funciona "de boa" se, e somente se, a nota contiver  apenas um item (o que ocorre em 99% dos casos que temos). Esse 1% é que me arrebenta...

       

      Vejam como o xml da NF vem quando há mais de um item:

      item 1.PNG

       

      item 2.PNG

       

      Eis então minha questão:

       

      Como fazer a leitura desses dois itens, considerando que as tags que utilizo são as mesmas nos dois itens?

       

      cuv, afurtado, stalwar1

       

      Abs e Sucesso!