如何使用VBscript处理多个xml代码行

时间:2012-05-08 17:39:35

标签: xml vbscript

所以基本上我的xml文件有多行xml代码,即

   <?xml version="1.0" encoding="UTF-8"?> <Stuff>... </stuff>
   <?xml version="1.0" encoding="UTF-8"?> <Stuff>... </stuff>
   ...
  <?xml version="1.0" encoding="UTF-8"?> <Stuff>... </stuff>

我想要做的就是更改我的vbscript,这些vbscript可以运行在其中一行代码上运行,我将如何进行此操作?

编辑:我正在更改节点的值,并在所有代码行中统一更改它。

1 个答案:

答案 0 :(得分:1)

您的第一个问题是访问该文件。由于VBScript / FileSystemObject不支持UTF-8中的读/写,因此您可能必须使用ADODB.Stream。如果每一行都包含一个格式正确/有效的XML文档 - <Stuff> ... </stuff>只是一个错字 - 您必须使用.LoadXml将字符串/行提供给Msxml2.DOMDocument。然后,您可以应用“更改节点”代码。

增加:

证明概念代码以显示方法:

  Dim sIFSpec : sIFSpec = goFS.GetAbsolutePathName("..\data\01.xml")
  Dim sOFSpec : sOFSpec = goFS.GetAbsolutePathName("..\data\01-1.xml")
  Dim oXD     : Set oXD = CreateObject("Msxml2.DOMDocument")
  Dim sXPath  : sXPath  = "/stuff/name"
  Dim aLines  : aLines = Split(readAllFromFileUTF8(sIFSpec), vbCrLf)
  WScript.Echo Join(aLines, vbCrLf)
  Dim nLine, sLine, ndFnd
  For nLine = 0 To UBound(aLines)
      sLine = aLines(nLine)
      If "" <> sLine Then
         oXD.LoadXml sLine
         Set ndFnd = oXD.selectSingleNode( sXPath )
         If ndFnd Is Nothing Then
            WScript.Echo "|", sXPath, "| not found"
         Else
            WScript.Echo "found   |" & ndFnd.text & "|"
            ndFnd.text = "Ekkehard Hörner"
            aLines(nLine) = Replace(oXD.xml, vbCrLf, "")
         End If
      End If
  Next
  writeAllToFileUTF8 sOFSpec, Join(aLines, vbCrLf)
  WScript.Echo Join(aLines, vbCrLf)

输出:

<?xml version="1.0" encoding="UTF-8"?> <stuff><num>1</num><name>Hörner</name></stuff>
<?xml version="1.0" encoding="UTF-8"?> <stuff><num>2</num><name>Hörner</name></stuff>
<?xml version="1.0" encoding="UTF-8"?> <stuff><num>3</num><name>Hörner</name></stuff>

found   |Hörner|
found   |Hörner|
found   |Hörner|

<?xml version="1.0"?><stuff><num>1</num><name>Ekkehard Hörner</name></stuff>
<?xml version="1.0"?><stuff><num>2</num><name>Ekkehard Hörner</name></stuff>
<?xml version="1.0"?><stuff><num>3</num><name>Ekkehard Hörner</name></stuff>

功能readAllFromFileUTF8和子writeAllToFileUTF8留作练习。