Bom dia, estou tentando fazer uma validação na importação do XML para ele verificar se existe a tag que pode ou não vir no XML. Caso o XML tenha a tag, funciona perfeitamente, porém se não tiver dá erro de variável não existente.
Estou usando a função XmlChildEx porém não está funcionando, tendo ou não a tag ele está retornando "Nil". Segue abaixo a linha:
cF2_TPFRETE := IIF(XmlChildEx(oXml:_nfeProc:_NFe:_InfNfe:_transp,"_modFrete") !=NIL,ALLTRIM(oXml:_nfeProc:_NFe:_InfNfe:_transp:_modFrete:Text),0) //Tipo frete
Bom dia Miriam, que erro ocorre? o XML sempre tem a estrutura _transp, mesmo quando o modFrete não existe? Coloque os exemplos de código e XML que está utilizando, por favor.
— Daniel Mendes 26 de Aug de 2019Pode existir ou não a tag, se trata do xml da NFe. Algumas tags não aparecem dependendo da situação. Então utilizei o IF, Se na função XmlChildEx retornar true, ele me traz o valor da tag, senão se for igual a NIL me retorna 0. Essa função XmlChildEx serve para verificar se a tag existe, e debugando o fonte de fato existe, o retorno do IF deveria ser true. Porém existindo ou não a tag ele retorna NIL.
— Miriam Félix 26 de Aug de 2019No xml que estou importando existe a tag: transp> modFrete>1 xNome>PAULINERIS TRANS. E ENCOMENDAS LTDA xEnder>RUA JUCA CASTELO, xMun>SANTA RITA DO SAPUCAI UF>MG /transporta>) se debugo o código eu consigo atribuir o valor da tag a uma variável, consigo ver que existe um valor, mas como existe esse condição do IF e minha função XmlChildEx esta retornando NIL, ele atribui o valor 0 ao cF2_TPFRETE do exemplo. Se existe a tag pq retorna NIL?
— Miriam Félix 26 de Aug de 2019Por favor, consegue anexar o fonte e o XML? Existem muitas pessoas que fazem um TYPE do XML, mas isso causa uma grande perda de performance.
— Daniel Mendes 26 de Aug de 2019Inclui os anexos.
— Miriam Félix 26 de Aug de 2019Olá pessoal, passei pro esse mesmo problema. Na verdade o erro ocorre quando o primeiro parâmetro passado NÃO existe na estrutura do XML. Por tanto o nó inicial deve existir na estrutura. No meu caso eu estava usando a função dessa forma IF XMLCHILDEX(aItens[nx]:_IMPOSTODEVOL:IPI,"_VIPIDEVOL") <> NIL e estava dando erro porque na estrutura não tem o nó _IMPOSTDEVOL, então alterei para if XMLCHILDEX(aItens[nx],"_VIPIDEVOL") <> NIL e funcionou. abs
— Vescio Pereira de Moura 13 de Jul de 2022