удалить узлы из XML с помощью VBS - PullRequest
0 голосов
/ 26 октября 2018

У меня есть этот код в 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", потому что есть много других используемых узловтот же тег, который я пропустил в приведенном выше коде.

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 26 октября 2018

Это должно сделать это

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 просто нуждался в исправлении для синтаксиса селектора атрибута, т.е.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...