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("" + cTag + ">", 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.