2012-08-02 98 views
1

这是我的XML文件的一个精简版:simple.xmlVBS搜索XML节点,改变子属性

<project> 
<scenes> 
    <scene> 
    <rootgroup> 
    <nodelist> 
    <module type="WRITE" name="Write_1080P"> 
     <option> 
     <disabled val="true"/> 
     </option> 
    </module> 
    </nodelist> 
    </rootgroup> 
    </scene> 
</scenes> 
</project> 

我需要一个VBScript找到正确的“模块”节点通过它的属性名=“Write_1080p”,然后将其子节点的属性“val”更改为“disabled”。

应该很简单,但我不熟悉VB中的脚本,并且即将发生癫痫发作。

+0

[使用VBS搜索XML并更改值]的可能重复(http://stackoverflow.com/questions/11726266/searching-xml-using-vbs-and-changing-a-value) – 2013-03-13 22:00:19

回答

1

这个脚本:

Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject") 
    Dim sFSpec : sFSpec = oFS.GetAbsolutePathName("..\testdata\xml\so11781815.xml") 
    Dim oXML : Set oXML = CreateObject("Msxml2.DOMDocument") 
    oXML.setProperty "SelectionLanguage", "XPath" 
    oXML.async = False 
    oXML.load sFSpec 
    If 0 = oXML.parseError Then 
    WScript.Echo oXML.xml 
    WScript.Echo "-----------------" 
    Dim sXPath : sXPath = "/project/scenes/scene/rootgroup/nodelist/module[@name=""Write_1080P""]/option/disabled" 
    Dim ndFnd : Set ndFnd = oXML.selectSingleNode(sXPath) 
    If ndFnd Is Nothing Then 
     WScript.Echo sXPath, "not found" 
    Else 
     WScript.Echo ndFnd.nodeName, ndFnd.getAttribute("val") 
     WScript.Echo "-----------------" 
     ndFnd.setAttribute "val", "disabled" 
     WScript.Echo oXML.xml 
    End If 
    Else 
    WScript.Echo oXML.parseError.reason 
    End If 

输出:

<project> 
     <scenes> 
       <scene> 
         <rootgroup> 
           <nodelist> 
             <module type="WRITE" name="Write_1080P"> 
               <option> 
                 <disabled val="true"/> 
               </option> 
             </module> 
           </nodelist> 
         </rootgroup> 
       </scene> 
     </scenes> 
</project> 

----------------- 
disabled true 
----------------- 
<project> 
     <scenes> 
       <scene> 
         <rootgroup> 
           <nodelist> 
             <module type="WRITE" name="Write_1080P"> 
               <option> 
                 <disabled val="disabled"/> 
               </option> 
             </module> 
           </nodelist> 
         </rootgroup> 
       </scene> 
     </scenes> 
</project> 

展示了如何使用.setProperty "SelectionLanguage", "XPath"确保XPath查询处理,如何查询的属性值(..t/module[@name=""Write_1080P""]/opt..),以及如何读取(.getAttribute("val"))和写入(.setAttribute "val", "disabled")属性。

P.S. 看看here看看你如何寻找/更改文本(具有基本相同的代码)。

+0

不可思议!谢谢Ekkehard。只需要添加'oXML.Save“simple.xml”'来写入文件。 – Matthr0X 2012-08-03 18:03:42