Nesse vídeo demonstraremos a utilização das funções XmlParser e XMLParserFile, que servem para transformar um conteúdo XML (string ou arquivo) em um objeto.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe544 Converte uma estrutura em string ou arquivo XML para um objeto @type Function @author Atilio @since 07/04/2023 @see https://tdn.totvs.com/display/tec/XmlParser e https://tdn.totvs.com/display/tec/XmlParserFile @obs Função XmlParser Parâmetros + cXML , Caractere , Indica a string que contém o texto em XML + cReplace , Caractere , Indica o prefixo que será utilizado para cada tag encontrada + cError , Caractere , Caso ocorra erros na conversão essa variável receberá os detalhes + cWarning , Caractere , Caso ocorra avisos na conversão essa variável receberá os detalhes Retorno + oXML , Objeto , Objeto com a estrutura de acordo com o XML informado Função XmlParserFile Parâmetros + cFile , Caractere , Nome do arquivo que contém as informações do XML + cReplace , Caractere , Indica o prefixo que será utilizado para cada tag encontrada + cError , Caractere , Caso ocorra erros na conversão essa variável receberá os detalhes + cWarning , Caractere , Caso ocorra avisos na conversão essa variável receberá os detalhes Retorno + oXML , Objeto , Objeto com a estrutura de acordo com o XML informado **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe544() Local aArea := FWGetArea() //Exemplo usando XMLParser fExemplo() //Exemplo usando XMLParserFile fExemploArq() FWRestArea(aArea) Return Static Function fExemplo() Local aArea := FWGetArea() Local cXML := "" Local oXML 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 um atributo com AttIsMemberOf If AttIsMemberOf(oDetalhes, "_idade") FWAlertInfo("O atributo 'idade' foi encontrado no objeto, sendo: " + oDetalhes:_idade:TEXT, "Exemplo de XmlParser") EndIf EndIf FWRestArea(aArea) Return Static Function fExemploArq() Local aArea := FWGetArea() Local cArquivo := "\x_temp\teste.xml" Local oXML Local cAviso := "" Local cErro := "" //Transformando o XML (texto) em um objeto (só funciona se o arquivo estiver dentro da Protheus Data) oXML := XmlParserFile(cArquivo, "_", @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 XmlParserFile") EndIf EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.