✨ ADVPL – XMLFormat Beautiful Formatter
✅ Exemplo prático em ADVPL
/*/{Protheus.doc} XMLFormat
Formata uma string com tags XML acrescetando quebra de linha e tabulação
@since 28/06/2018
@return cTextoNovo, String formatada
@param cTextoOrig, characters, String que sera formatada
/*/
User Function XMLFormat(cTextoOrig)
Local cTextoNovo := ""
Local aLinhas := {}
Local cEspaco := ""
Local nAbriu := 0
Local nAtual := 0
If ! Empty(cTextoOrig)
cTextoNovo := StrTran(cTextoOrig, ">" + TAB, ">" + CRLF + TAB)
cTextoNovo := StrTran(cTextoNovo, "><", ">" + CRLF + "<")
aLinhas := StrTokArr(cTextoNovo, CRLF)
cTextoNovo := ""
// Percorre as linhas adicionando tabulacao
For nAtual := 1 To Len(aLinhas)
aLinhas[nAtual] := FwCutOff(AllTrim(aLinhas[nAtual])) // Retira TAB e CRLF
If ! Empty(aLinhas[nAtual])
// Se for fechamento de tag, diminui a tabulacao
If "</" $ aLinhas[nAtual] .And. At('<', SubStr(aLinhas[nAtual], 2, Len(aLinhas[nAtual]))) == 0
nAbriu -= 1
EndIf
// Definindo a quantidade de espacos em branco, conforme numero de tags abertas
cEspaco := ""
If nAbriu > 0
cEspaco := Replicate( TAB, nAbriu)
EndIf
// Monta o texto com a tabulacao
cTextoNovo += cEspaco + aLinhas[nAtual] + CRLF
// Se for abertura de tag, e nao for fechamento na mesma linha, aumenta a tabulacao
If "<" $ aLinhas[nAtual] .And. ! "</" $ aLinhas[nAtual] .And. ! "/>" $ aLinhas[nAtual]
nAbriu += 1
EndIf
EndIf
Next
EndIf
Return cTextoNovo
Return( Nil )
📌 Observações
- Função extremamente útil para organizar XML de forma legível 👀
- Ideal para logs, debug e validações.
- Eficiente e simples de implementar.
🔗 Fontes: Código compartilhado pelo Endrigo.
Gostou? Então compartilhe com sua galera dev e deixe um comentário! 😎🚀