2013-05-18 88 views
3

我想從每個<product>節點刪除<P_ID> & <P_Name>節點。如何使用vbscript刪除XML文件中的節點?

這裏是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) 

回答

5

你需要在前面加上一個斜線從根節點引用您的XPath字符串。然後從父節點可以調用removeChild()方法傳遞節點刪除,這樣...

Set nodes = objXMLDoc.selectNodes("/products/product/P_ID | " & _ 
            "/products/product/P_Name") 
For Each node In nodes 
    node.parentNode.removeChild(node) 
Next 
+0

它說的參數節點不是此節點的子節點。 – Gast1

+0

對不起,我們需要回到父級,然後調用'removeChild()'。我已經更新了答案。 – davmos

+0

我們該怎麼做? – Gast1