How to mass replace 'inner text' in specific keys in XML file? (6)
Download: 20111223.Profiling.XML.MassReplace as zip package
;==========================================================================================================================================
;
; How to mass replace 'inner text' in specific keys in XML file? (6)
;
; The 'FileRead' Version.
;
; (c)Detlev Dalitz.20111220.
;==========================================================================================================================================

;-----------------------------------------------------
;   Ini file "Config.ini".
;
;   [IniFilePass]
;   C01_01=Pass
;   C01_02=Pass
;   C01_03=Pass
;   C01_04=Pass
;   D01_02=Pass
;   D01_03=Not Reporting
;   D01_04=Not Reporting
;   D01_05=Pass
;   E01_01=Pass
;   E01_02=Pass
;   E01_03=Confidential - Not Provided
;   E01_04=Pass
;   E01_05=Pass
;   E01_06=Pass
;   E01_07=Pass
;   E01_08=Not Reporting - Privileged Information
;   E01_09=Pass
;   E01_10=Pass
;-----------------------------------------------------

; Define working folder.
strFolderHome = DirScript ()
DirChange (strFolderHome)

; Define data file pathes.
strFileIni = strFolderHome : "Config.ini"
strFileXmlIn = strFolderHome : "Data.in.xml"
strFileXmlOut = strFolderHome : "Data.out.xml"

; For sure, remove existing output file.
If 0 != FileExist (strFileXmlOut) Then FileDelete (strFileXmlOut)


; Open ini file and get the keys.
strIniSection = "IniFilePass"
arrKeys = Arrayize (IniItemizePvt (strIniSection, strFileIni), @TAB)
ArraySort (arrKeys)

; Open output file.
hdlFW = FileOpen (strFileXmlOut, "WRITE")

; Read input xml line by line.
intLastIC65 = IntControl (65, 4096, 0, 0, 0) ; Set size of internal FileRead buffer.
hdlFR = FileOpen (strFileXmlIn, "READ")
While @TRUE
   strLine = FileRead (hdlFR)
   If strLine == "*EOF*" Then Break
   If strLine != ""
      intPosABLeft = StrIndex (strLine, "<", 1, @FWDSCAN)
      intPosABRight = StrIndex (strLine, ">", intPosABLeft + 1, @FWDSCAN)
      strKey = StrSub (strLine, intPosABLeft + 1, intPosABRight - intPosABLeft - 1)
      intIndex = ArraySearch (arrKeys, strKey, 3)
      If intIndex != -1
         strValue = IniReadPvt (strIniSection, strKey, "Pass", strFileIni)
         If strValue != "Pass" ; Do the replacements.
            strLine = StrSub (strLine, 1, intPosABLeft - 1) : "<" : strKey : ">" : strValue : "</" : strKey : ">"
         EndIf
      EndIf
   EndIf
   FileWrite (hdlFW, strLine)
EndWhile

; Close files.
hdlFR = FileClose (hdlFR)
hdlFW = FileClose (hdlFW)

; If this script has been called from another WB script, then return to the caller from here ...
If RtStatus () != 10 Then If IntControl (77, 80, 0, 0, 0) > 0 Then Return ; ... when not in WinBatch Studio debug mode.

; Display result.
ShellExecute (strFileXmlOut, "", "", @NORMAL, "")

:CANCEL
Exit