Função para indentar um arquivo XML via AdvPL

Olá pessoal…

Hoje vou mostrar uma rotina desenvolvida em AdvPL, que serve para indentar um arquivo XML, deixando com espaços a esquerda entre as tags.

Se algum dia você já precisou indentar um XML e não utiliza o Pretty Print XML do Notepad++, foi feito uma função em AdvPL, que você passa o conteúdo, e ele te retorna indentado, por exemplo, supondo que você tenha esse XML:

DanielBauru

Ao rodar a rotina, o texto ficaria assim:


  
    Daniel
  
  
    Bauru
  

Abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zPrettyXML
Função que serve para quebrar um XML e deixá-lo indentado para o usuário
@author Atilio
@since 13/05/2018
@version 1.0
@param cTextoOrig, characters, descricao
@type function
@example Exemplo Abaixo
	//..............
	cTextoOrig := MemoRead("C:\TOTVS\notas\original.xml")
	cTextoNovo := ""
	
	cTextoNovo := u_zPrettyXML(cTextoOrig)
	
	Aviso('Atenção', cTextoNovo, {'OK'}, 03)
	//..............
/*/

User Function zPrettyXML(cTextoOrig)
	Local aArea      := GetArea()
	Local cTextoNovo := ""
	Local aLinhas    := {}
	Local cEspaco    := ""
	Local nAbriu     := 0
	Local nAtual     := 0
	Local aLinNov    := {}
	
	//Se tiver conteúdo texto, e tiver o trecho de XML
	If ! Empty(cTextoOrig) .And. '",                 ">" + CRLF)
		cTextoNovo := StrTran(cTextoNovo, "zPrettyXML_QUEBR",  CRLF + "" $ aLinhas[nAtual]
					nAbriu += 1
				EndIf
				
				//Definindo a quantidade de espaços em branco, conforme número de tags abertas
				cEspaco := ""
				If nAbriu > 0
					cEspaco := Replicate(' ', 2 * (nAbriu + Iif(! "<" $ aLinhas[nAtual], 1, 0)) )
				EndIf
				
				//Monta agora o texto com a tabulação
				aAdd(aLinNov, cEspaco + aLinhas[nAtual])
				
				//Se for fechamento de tag, diminui a tabulação
				If "

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