Как я могу удалить узел в XML-файле с помощью vbscript?

Я хочу удалить узлы <P_ID> & <P_Name> из каждого <product> узла.

Вот как выглядит XML:

<products>
 <product>
     <P_ID><![CDATA[4]]></P_ID>
     <Item_T><![CDATA[Pt]]></Item_T>
     <P_Name><![CDATA[5]]></P_Name>
  </product>
  <product>
     <P_ID><![CDATA[4]]></P_ID>
     <Item_T><![CDATA[Pt]]></Item_T>
     <P_Name><![CDATA[5]]></P_Name>
  </product>
  <product>
     <P_ID><![CDATA[4]]></P_ID>
     <Item_T><![CDATA[Pt]]></Item_T>
     <P_Name><![CDATA[5]]></P_Name>
  </product>
  <product>
     <P_ID><![CDATA[4]]></P_ID>
     <Item_T><![CDATA[Pt]]></Item_T>
     <P_Name><![CDATA[5]]></P_Name>
  </product>
</products>

Таких узлов продукта тысячи.

Вот что у меня есть на данный момент:

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

Dim XMLFile
XMLFile = "products.xml"
objXMLDoc.load(XMLFile) 
Set nodes = objXMLDoc.selectNodes("products/product/P_ID")
For Each node In nodes
  objXMLDoc.documentElement.remove
Next

objXMLDoc.Save(XMLFile)

person Gast1    schedule 18.05.2013    source источник


Ответы (1)


Вам нужно ссылаться на корневой узел в строке XPath, добавив перед ним косую черту. Затем из родительского узла вы можете вызвать метод removeChild(), передавая удаляемый узел, вот так ...

Set nodes = objXMLDoc.selectNodes("/products/product/P_ID | " & _
                                  "/products/product/P_Name")
For Each node In nodes
  node.parentNode.removeChild(node)
Next
person davmos    schedule 18.05.2013
comment
он говорит, что узел параметров не является дочерним по отношению к этому узлу. - person Gast1; 18.05.2013
comment
Да, извините, нам нужно вернуться к родительскому объекту, а затем вызвать removeChild(). Я обновил ответ. - person davmos; 18.05.2013
comment
Попробуйте обновленный ответ выше. Я также обновил xpath, включив оба набора узлов, которые вы хотите удалить. На этот раз я тоже это тестировал ;-) - person davmos; 18.05.2013
comment
Без проблем. Я должен был сначала протестировать, прежде чем отвечать в первый раз;) Вы можете отметить как ответ, пожалуйста. - person davmos; 18.05.2013