Amigos,
segue uma função que criei para alterar uma TAG de um XML.
Espero que possa ser útil para mais alguém.
#include "FiveWin.ch"
function Main()
AlteraValorTagXml("bemasat.xml", "cancelar_venda", "1")
return
/*********************************************************************************************/
procedure AlteraValorTagXml( cXMLFile, cXMLTag, cNewValue )
/*
*/
Local x, aArray, nArquivo, cLinha, cTagInicial, cTagFinal, nTamanhoTag, nTamanhoTagFinal, nPosicao
Local nPosicaoTagFinal, cInicial, cFinal
if !File(cXMLFile)
MsgStop("Arquivo não localizado: "+Alltrim(cXMLFile), "Atenção!")
return
endif
aArray := ArquivoParaArray(cXMLFile)
if Ferase(cXMLFile) == 0
nArquivo := fCreate(cXMLFile)
if nArquivo < 1
MsgStop('Erro ao criar o arquivo: '+cXMLFile,'XML')
return
endif
for x := 1 to len(aArray)
if Empty(aArray[x])
loop
endif
cLinha := aArray[x]
cTagInicial := "<"+Alltrim(cXMLTag)+">"
cTagFinal := ""+Alltrim(cXMLTag)+">"
nTamanhoTag := Len(cTagInicial)
nTamanhoTagFinal := Len(cTagFinal)
nPosicao := At(cTagInicial, cLinha )
nPosicaoTagFinal := At(cTagFinal , cLinha )
if !Empty(nPosicao)
cInicial := substr(cLinha,nPosicao ,nTamanhoTag)
cFinal := substr(cLinha,nPosicaoTagFinal,nTamanhoTagFinal)
cLinha := Space(nPosicao-1)+Alltrim(cInicial)+Alltrim(cNewValue)+Alltrim(cFinal)
endif
fWrite(nArquivo, cLinha + CRLF)
next
fClose(nArquivo)
endif
return
/**********************************************************************/
static function ArquivoParaArray(cFileOrigem)
/*
Conteudo de um arquivo em array
*/
Local cFileName := cFileOrigem
Local aLines := {}
Local nFileHandle := FOpen( cFileName )
Local cLine
if nFileHandle != -1
do while HB_FReadLine( nFileHandle, @cLine ) == 0
AAdd( aLines, cLine )
enddo
//Add the last line
AAdd( aLines, cLine )
//Close file
FClose( nFileHandle )
endif
return(aLines)
↧