使用 vbs 从 XML 中删除节点

remove nodes from XML using vbs

我在 xml 文件中有此代码:

<?xml version="1.0" encoding="utf-8"?>
<settings id="2.0">
  <settings>
    <entry key="RecentFiles">
      <list>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
        <value>\proj01.jpg</value>
      </list>
    </entry>
    <child key="Options">
      <child key="DefaultFileDialogDirectories">
        <entry key="OpenAndSaveDirectory">C:\Users\XXXXX\Desktop</entry>
        <entry key="ImportDirectory">\proj01\</entry>
        <entry key="BitmapDirectory">H:\Documents\Screengrabs</entry>
        <entry key="ExportDirectory">C:\Users\XXXXX\Desktop\_TempStuff</entry>
        <entry key="AttachReferenceFileDirectory">C:\Users\XXXXX\Desktop</entry>
        <entry key="WorksessionDirectory">C:\Users\XXXXX\Desktop</entry>
      </child>
    </child>
  </settings>
</settings>

我想删除 "RecentFiles" 和 "DefaultFileDialogDirectories"

看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<settings id="2.0">
  <settings>
    <entry key="RecentFiles">
      <list>
      </list>
    </entry>
    <child key="Options">
      <child key="DefaultFileDialogDirectories">
      </child>
    </child>
  </settings>
</settings>

怎么做?

低于我失败的尝试:

Set objXMLDoc = Wscript.CreateObject("Microsoft.XMLDOM") 
objXMLDoc.async = False 

Dim XMLFile
XMLFile = "C:\Users\XXXXX\Desktop\settings.xml"
objXMLDoc.load(XMLFile) 

Set nodes = objXMLDoc.selectNodes("/settings/settings/entry key='RecentFiles'/list | " & _
                                  "/settings/settings/child key='Options'/child key='DefaultFileDialogDirectories'/")
For Each node In nodes
  node.parentNode.removeChild(node)
Next

objXMLDoc.Save(XMLFile)

我不能单独 select "entry" 和 "child" 因为还有许多其他节点使用我在上面发布的代码中省略的相同标签。

请帮忙!

应该这样做

Option Explicit

dim objXMLDoc 
Set objXMLDoc = Wscript.CreateObject("MSXML2.DomDocument") 
objXMLDoc.async = False 

Dim XMLFile
XMLFile = "C:\Users\XXXXX\Desktop\settings.xml"
if not objXMLDoc.load(XMLFile) then
    WScript.Echo "Error loading XML: " & objXMLDoc.parseError.reason
    WScript.Quit 1
end if

dim nodes, node
Set nodes = objXMLDoc.selectNodes("/settings/settings/entry[@key='RecentFiles']/list/value | " & _
                                  "/settings/settings/child[@key='Options']/child[@key='DefaultFileDialogDirectories']/entry")
For Each node In nodes
  node.parentNode.removeChild node
Next

objXMLDoc.Save XMLFile 

我在 XML 加载和 Option Explicit 上添加了错误检查,因为这总是有帮助的。您的 XPath 只需要更正属性选择器语法,即 [@attr = 'value']