In general, XML data should be processed with XML tools (DOM manipulation, XSLT), exactly because those methods tend to scale better when the size/complexity of the problem grows.
But for special cases (e.g. ASCII encoding, foolproof marking of the replacements) using a RegExp replace function and a dictionary may solve a templating task efficiently (see here).
Demo code:
Option Explicit
Function fnRepl(sM, nP, sS)
fnRepl = gdX(sM)
End Function
Function mkDic(aK, aV)
Dim tmp : Set tmp = CreateObject("Scripting.Dictionary")
Dim i
For i = 0 To UBound(aK)
tmp(aK(i)) = aV(i)
Next
Set mkDic = tmp
End Function
Dim gdX : Set gdX = mkDic( _
Split("[Variable1] [Variable2] [Variable3] [Variable4]") _
, Split("abra cada bra sesame") _
)
Dim r : Set r = New RegExp
r.Global = True
r.Pattern = "[[^]]+]"
Dim sT : sT = Join(Array( _
"<?xml version=""1.0""?>" _
, "<config>" _
, " <modules>" _
, " <[Variable1]_[Variable2]>" _
, " <active>true</active>" _
, " <codePool>[Variable3]</codePool>" _
, " <version>[Variable4]</version>" _
, " </[Variable1]_[Variable2]>" _
, " </modules>" _
, "</config>" _
), vbCrLf)
WScript.Echo sT
WScript.Echo "----------"
WScript.Echo r.Replace(sT, GetRef("fnRepl"))
output:
cscript 45553911.vbs
<?xml version="1.0"?>
<config>
<modules>
<[Variable1]_[Variable2]>
<active>true</active>
<codePool>[Variable3]</codePool>
<version>[Variable4]</version>
</[Variable1]_[Variable2]>
</modules>
</config>
----------
<?xml version="1.0"?>
<config>
<modules>
<abra_cada>
<active>true</active>
<codePool>bra</codePool>
<version>sesame</version>
</abra_cada>
</modules>
</config>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…