Substituir o conteúdo de uma tag XML via AdvPL ou TLPP | Ti Responde 0244

No vídeo de hoje, vamos demonstrar em como substituir o conteúdo de uma tag via AdvPL / TLPP.

A dúvida de hoje, nos perguntaram, como poderíamos substituir o conteúdo de uma tag XML (ou HTML) diretamente via AdvPL.

Pensando nisso, montamos um exemplo, onde em uma função é demonstrado em como fazer a substituição do conteúdo.

Segue abaixo o vídeo exemplificando:

Abaixo o código fonte desenvolvido da zSubstTag:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} zSubstTag
Função para substituir o conteúdo de uma tag por outro
@type user function
@author Atilio
@since 04/03/2026
@param cXML, Caractere, XML completo original
@param cTag, Caractere, Tag que terá o conteúdo substituído
@param cConteudo, Caractere, Novo conteúdo da tag
@return cNovoXml, Caractere, Novo XML com o conteúdo substituído
/*/

User Function zSubstTag(cXML, cTag, cConteudo)
    Local aArea        := FWGetArea()
    Local cTextoAntes  := ""
    Local cTextoDepois := ""
    Local cNovoXml     := ""

    //Se tiver XML, e tiver a tag dentro
    If ! Empty(cXml) .And. "<" + cTag + ">" $ cXML
        cNovoXML := cXML

        //Captura o texto antes da tag
        cTextoAntes := SubStr(cNovoXml, 1, At("<" + cTag + ">", cNovoXML) + Len(cTag) + 1)

        //Captura o texto depois da tag
        cTextoDepois := SubStr(cNovoXml, At("", cNovoXML))

        //Monta o novo XML, com o conteúdo substituído
        cNovoXML := cTextoAntes + cConteudo + cTextoDepois
    EndIf

    FWRestArea(aArea)
Return cNovoXml

E abaixo o exemplo de como usar a função:

//Bibliotecas
#Include "tlpp-core.th"

//Declaração da namespace
Namespace custom.terminal.youtube

#Define CRLF Chr(13) + Chr(10) //Carriage Return Line Feed
    
/*/{Protheus.doc} User Function video0244
Exemplo de como alterar o conteúdo de uma tag dentro de um XML
@type Function
@author Atilio
@since 06/03/2026
@example custom.terminal.youtube.u_video0244()
/*/

User Function video0244()
    Local aArea     := FWGetArea() As Array
    Local cXML      := ""          As Character
    Local cNewXML   := ""          As Character
    
    //Monta o XML que será convertido em um Objeto
    cXML := '' + CRLF
    cXML += '' + CRLF
    cXML += '  João' + CRLF
    cXML += '  33' + CRLF
    cXML += '  sim' + CRLF
    cXML += '' + CRLF

    //Agora substitui o conteúdo das tags
    cNewXML := cXML
    cNewXML := u_zSubstTag(cNewXML, "nome",       "José")
    cNewXML := u_zSubstTag(cNewXML, "idade",      "40")
    cNewXML := u_zSubstTag(cNewXML, "gostaDeLer", "não")

    //Mostra os dois
    ShowLog("Antes: " + CRLF + cXML + CRLF + CRLF + "Depois: " + CRLF + cNewXML)
    
    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