使用 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']
我在 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']