【问题标题】:remove nodes from XML using vbs使用 vbs 从 XML 中删除节点
【发布时间】:2018-10-26 17:39:34
【问题描述】:

我在 xml 文件中有这段代码:

<?xml version="1.0" encoding="utf-8"?>
<settings id="2.0">
  <settings>
    <entry key="RecentFiles">
      <list>
        <value>\\proj01\1.jpg</value>
        <value>\\proj01\2.jpg</value>
        <value>\\proj01\3.jpg</value>
        <value>\\proj01\4.jpg</value>
        <value>\\proj01\5.jpg</value>
        <value>\\proj01\6.jpg</value>
        <value>\\proj01\7.jpg</value>
        <value>\\proj01\8.jpg</value>
        <value>\\proj01\9.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)

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

请帮忙!

【问题讨论】:

    标签: xml vbscript


    【解决方案1】:

    应该这样做

    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']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多