使用VBScript将XML字符串直接写入XML文件

时间:2017-08-07 18:55:39

标签: xml windows vbscript windows-7-x64 msxml2

我的操作系统是Windows 7 64位。我需要使用VBScript将以下XML字符串以及解释的动态内容写入XML文件(还维护选项卡缩进):

文件名:[Variable1]_[Variable2].xml

<?xml version="1.0"?>
<config>
    <modules>
        <[Variable1]_[Variable2]>
            <active>true</active>
            <codePool>[Variable3]</codePool>
            <version>[Variable4]</version>
        </[Variable1]_[Variable2]>
    </modules>
</config>

我可以尝试的只是在脚本下面逐个创建各种标签和元素。

scriptDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0")
Set objRoot = xmlDoc.CreateElement("config")
xmlDoc.AppendChild objRoot
Set objRecord = xmlDoc.CreateElement("modules")
objRoot.AppendChild objRecord
Set objName = xmlDoc.CreateElement("Mageweb_ShippingFilter")
objName.Text = ""
objRecord.AppendChild objName
Set objDate = xmlDoc.CreateElement("AuditDate")
objDate.Text = Date
objRecord.AppendChild objDate
Set objIntro = xmlDoc.CreateProcessingInstruction("xml", "version='1.0'")
xmlDoc.InsertBefore objIntro, xmlDoc.ChildNodes(0)
'For now there is static name of file
xmlDoc.Save scriptDir & "\Testfile.xml"

但是这对于将来可能的大型XML文件来说似乎过于繁琐,所以我可以直接编写上面的XML字符串(所有变量用其相关值解释),直接写入XML文件,然后给出变量 - 基于VBScript的动态名称?

2 个答案:

答案 0 :(得分:1)

通常,XML数据应该使用XML工具(DOM操作,XSLT)进行处理,因为当问题的大小/复杂性增加时,这些方法往往会更好地扩展。

但是对于特殊情况(例如ASCII编码,替换的万无一失的标记),使用RegExp替换函数和字典可以有效地解决模板任务(参见here)。

演示代码:

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"))

输出:

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>

答案 1 :(得分:0)

看看这是否有帮助

Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0")

xmlDoc.LoadXML strXML 'strXML being your xml string

xmlDoc.Save strPath 'Directory and name of the save location

要使此方法起作用,strXML变量应预先解释变量。您可以使用字符串方法来实现它。

P.S。我已经在手机上写了这个片段,但可能会有一些错误,但这应该会有所帮助。