0

我需要编写一个简单的 VBScript 来修改现有的 XML 文件。我能够编写一个 VBScript 来修改一个元素,但我目前遇到的问题是我有多个元素具有相同的元素/标签名称但不同的属性,如下面的 XML 文档示例所示:

<MyDoc>
   <Section name="First">
      <....../>
  </Section>
  <Section name ="Second">
     <......>
     <Parameter name="Service" value="MsrNdp.dll"/>
   </Section>
 </MyDoc>

假设我只想将参数“Service”的“值”更改为“LdrXMP.dll”(然后保存):由于有多个名为“Section”的元素,我将如何指定我要引用属性值=“第二”的元素“部分”??

到目前为止,我有以下简单的 VBScript 代码:如何调整下面的代码以获得我想要的?谢谢你的帮助。

Set xmlDoc = _
  CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
xmlDoc.Load("C:\Users\Frank\Desktop\MyDoc.xml")
Set colNodes=xmlDoc.selectNodes _
("/MyDoc/Section ")
For Each objNode in colNodes
   objNode.Text = "LdrXMP.dll"
Next
xmlDoc.Save "C:\Users\Frank\Desktop\MyDoc.xml"
4

1 回答 1

1

使用引用名称属性、selectSingleNode() 和 getAttributeNode() 的 XPath 搜索表达式,如下所示:

  Dim oFS      : Set oFS      = CreateObject("Scripting.FileSystemObject")
  Dim sFSpec   : sFSpec       = goFS.GetAbsolutePathName("..\testdata\xml\so14541579.xml")
  Dim objMSXML : Set objMSXML = CreateObject("Msxml2.DOMDocument.6.0")
  objMSXML.setProperty "SelectionLanguage", "XPath"
  objMSXML.async = False

  objMSXML.load sFSpec

  If 0 = objMSXML.parseError Then
     Dim sXPath : sXPath    = "/MyDoc/Section[@name=""Second""]/Parameter"
     Dim ndFnd  : Set ndFnd = objMSXML.selectSingleNode(sXPath)
     If ndFnd Is Nothing Then
        WScript.Echo sXPath, "not found"
     Else
        WScript.Echo ndFnd.getAttributeNode("value").value
        ndFnd.getAttributeNode("value").value = "abracadabra.dll"
        WScript.Echo objMSXML.xml
     End If
  Else
     WScript.Echo objMSXML.parseError.reason
  End If

输出:

MsrNdp.dll
<MyDoc>
        <Section name="First">
                <Parameter name="Service" value="MsrNdp.dll"/>
        </Section>
        <Section name="Second">
                <Parameter name="Service" value="abracadabra.dll"/>
        </Section>
</MyDoc>
于 2013-01-26T22:08:55.173 回答