【问题标题】:How can I delete a node within a XML file by using vbscript?如何使用 vbscript 删除 XML 文件中的节点?
【发布时间】:2023-04-02 18:18:02
【问题描述】:

我想从每个 <product> 节点中删除 <P_ID><P_Name> 节点。

下面是 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)

【问题讨论】:

    标签: xml vbscript scripting msxml xmldom


    【解决方案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
    

    【讨论】:

    • 表示参数节点不是该节点的子节点。
    • 是的,抱歉,我们需要回到父级,然后致电removeChild()。我已经更新了答案。
    • 尝试上面更新的答案。我还更新了 xpath 以包含您要删除的两组节点。这次我自己也测试了;-)
    • 没问题。我应该在第一次回答之前先测试一下;)请您标记为答案。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多