Validando se nó existe em um XML com IsXmlNode – Maratona AdvPL e TL++ 315

Nesse vídeo demonstraremos a utilização da função IsXMLNode, que serve para validar se um nó (ou node) existe dentro de um XML.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} User Function zExe315
Valida se um nó existe dentro de uma tag em XML
@type Function
@author Atilio
@since 23/02/2023
@obs 
    Função IsXMLNode
    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
 
    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
 
User Function zExe315()
    Local aArea      := FWGetArea()
    Local cXML       := ""
    Local oXML
    Local oDetalhes
    Local cAviso     := ""
    Local cErro      := ""
 
    //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 tag (similar a XMLChildEx)
        If IsXmlNode(oDetalhes, "_gostaDeLer")
            FWAlertInfo("A tag 'gostaDeLer' foi encontrada no objeto, sendo: " + oDetalhes:_gostaDeLer:TEXT, "Exemplo de IsXmlNode")
        EndIf
 
    EndIf
 
    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação