1 (изменено: chilin, 2012-07-18 17:29:23)

Тема: VBScript: Не удаляется нода из XML

xml: example.xml

<?xml version="1.0" encoding="utf-8"?>
<datapack>
  <impex>
    <table id="00.00">
      <test id="01.00"/>
    </table>
  </impex>
</datapack>

Требуется удалить всю секцию <table></table> для ID=00.00

dim  oXml, xmlFile, oNodes1
  set oXml   = CreateObject("Microsoft.XMLDOM")
  oXml.async = false
  xmlFile    = "example.xml"
  oXml.Load(xmlFile)
  'set oNodes1  = oXml.selectSingleNode("/datapack/impex/table[@id='00.00']")
  set oNodes1  = oXml.selectSingleNode("//table[@id='00.00']")
  if oNodes1 is nothing then
    WScript.echo("Такой ноды нет")
  else 
    oXml.documentElement.removeChild(oNodes1)
    oXml.save(xmlFile)
    WScript.echo("Нода удалена")
  end if

В таком виде, removeChild выдаёт ошибку "Параметрический Node не является дочерним..."
Если из XML удалить одну из секций datapack или impex - удаление происходит.
Неужели removeChild работает только с не более чем двумя вложениями?

2

Re: VBScript: Не удаляется нода из XML

Вам нужно удалять узел из его родителя, а не из корневого узла.
Примерно так:

dim  oXml, xmlFile, oNodes1
  set oXml   = CreateObject("Microsoft.XMLDOM")
  oXml.async = false
  xmlFile    = "example.xml"
  xmlFile2    = "example2.xml"
  oXml.Load(xmlFile)
'set oNodes1  = oXml.selectSingleNode("/datapack/impex/table[@id='00.00']")
'  set oNodes1  = oXml.selectSingleNode("/")
  set oNodes1  = oXml.selectSingleNode("//test[@id='01.00']")
  if oNodes1 is nothing then
    WScript.echo("Такой ноды нет")
  else 
    if oNodes1.parentNode is nothing then
      WScript.echo("Нельзя удалить корневой узел")
    else
      oNodes1.parentNode.removeChild(oNodes1)
      oXml.save(xmlFile2)
      WScript.echo("Нода удалена")
    end if
  end if

3

Re: VBScript: Не удаляется нода из XML

Спасибо.