Nesse vídeo demonstraremos em como validar se um nó XML existe usando as funções AttIsMemberOf, XmlChildEx e XmlNodeExist.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe051 Exemplo de função que identifica se um atributo existe em um objeto (AttIsMemberOf) ou uma tag existe dentro do XML (XMLChildEx) @type Function @author Atilio @since 05/12/2022 @see https://tdn.totvs.com/display/tec/AttlsMemberOf e https://tdn.totvs.com/display/tec/XmlChildEx @obs Função AttIsMemberOf Parâmetros + oObj , Objeto , Nome do objeto instânciado + cAttName , Caractere , Nome da propriedade sendo pesquisada + lRecursive , Lógico , Indica se a pesquisa também será feita em classes superiores Retorno + lRet , Lógico , Retorna .T. se encontrou a tag ou .F. se não encontrou Função XMLChildEx Parâmetros + oParent , Objeto , Ojeto instânciado + cProcura , Caractere , Nome da propriedade sendo pesquisada (tudo em maiúsculo) Retorno + xRet , Indefinido , Retorna o objeto da tag dentro do XML ou um Array caso possua várias "sub-tags" Função XmlNodeExist Parâmetros Objeto instânciado Nome da propriedade sendo pesquisada Retorno Retorna .T. se encontrou a tag ou .F. se não **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe051() Local aArea := FWGetArea() Local cXML := "" Local oXML Local oDetalhes Local cAviso := "" Local cErro := "" Local xResult //Monta o XML que será convertido em um Objeto cXML := '<?xml version="1.0"?>' + CRLF cXML += '<detalhes>' + CRLF cXML += ' <nome>Atilio</nome>' + CRLF cXML += ' <idade>29</idade>' + CRLF cXML += ' <gostaDeLer>sim</gostaDeLer>' + CRLF cXML += ' <sites>' + CRLF cXML += ' <site item="1">' + CRLF cXML += ' <nome>Terminal de Informacao</nome>' + CRLF cXML += ' <url>terminaldeinformacao.com</url>' + CRLF cXML += ' </site>' + CRLF cXML += ' <site item="2">' + CRLF cXML += ' <nome>Atilio Sistemas</nome>' + CRLF cXML += ' <url>atiliosistemas.com</url>' + CRLF cXML += ' </site>' + CRLF cXML += ' </sites>' + CRLF cXML += '</detalhes>' + CRLF //Transformando o XML (texto) em um objeto oXML := XmlParser(cXML, "_", @cAviso, @cErro) //Se houve alguma falha If ! Empty(cErro) FWAlertError("Houve um erro na conversão do texto para objeto: " + cErro, "Falha no 'parse' do XML") Else //Pega a "subtag" de detalhes oDetalhes := oXML:_detalhes //Realizando a procura de um atributo com AttIsMemberOf If AttIsMemberOf(oDetalhes, "_idade") FWAlertInfo("O atributo 'idade' foi encontrado no objeto, sendo: " + oDetalhes:_idade:TEXT, "Exemplo de AttIsMemberOf") EndIf //Realizando a procura de tag com XMLChildEx (você precisa mandar o nome da tag tudo em maiúsculo) xResult := XMLChildEx(oDetalhes, "_GOSTADELER") If ValType(xResult) != "U" FWAlertInfo("A tag 'gostaDeLer' foi encontrada no objeto, sendo: " + xResult:TEXT, "Exemplo de XMLChildEx") EndIf //Verificando se a tag existe, independente se escreve tudo minúsculo ou maiúsculo If XmlNodeExist(oDetalhes, "_GostaDeLer") FWAlertInfo("A tag 'gostaDeLer' foi encontrada no objeto, sendo: " + oDetalhes:_gostaDeLer:TEXT, "Exemplo de XmlNodeExist") EndIf EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.