Função XmlChildEx

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

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

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.

Pode 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.

No xml que estou importando existe a tag:
transp>
modFrete>1</modFrete
transporta>
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?

Por 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.

Inclui os anexos.

Olá 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

Boa tarde Miriam,

Encontrei o problema, acontece que a função XmlChildEx espera o valor pesquisado em letras maiúsculas, na documentação consta essa informação, na área de observações:

http://tdn.totvs.com/display/tec/XmlChildEx

Para corrigir o seu problema, você deve fazer da seguinte forma:


XmlChildEx(oXml:_nfeProc:_NFe:_InfNfe:_transp,"_MODFRETE")

Porém essa função está presente diversas vezes em seu fonte, então... Você terá que alterar todas as vezes que utilizou para que tudo funciona corretamente.

pultz hahahaha não acredito, obrigada Daniel.