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.