网上实在是不容易找到VB操作XML的资料。
以下是在开发博导时涉及到的内容。XML已经渗透到各个语言环境中,不过一通百通,XML的方法和属性在各个语言里比较通用,至于在微软。 :) 以下是想删除某个子节点,及以下的内容。但是问题在于,它删除了所有子节点。似乎应该有个下标用于表示某个匹配的子节点。 '========================================================================================================== '删除某个节点 'strXMLPath XML文件及路径 'strID ID标识(删除有此标识的节点) 'Path 删除节点的路径 '例子 Call DeleteXMLNode("D:\my\C程序设计\VB\B博导\user\本地测试Draf.xml", "424691","//methodResponse/params/param/value/array/data/value/struct") '========================================================================================================== Public Sub DeleteXMLNode(strXMLPath As String, strID As String, Path As String) Dim fNodeObj, AttributeNode, objXmlDoc, xnl, xn Dim i As Integer If Trim(strID) = "0" Then Exit Sub Set objXmlDoc = CreateObject("Microsoft.XMLDOM") objXmlDoc.async = False objXmlDoc.Load strXMLPath Set xnl = objXmlDoc.selectNodes(Path) For Each xn In xnl If xn.getAttribute("id") = Trim(strID) Then xnl.removeAll '删除该节点的全部内容 Exit For End If Next objXmlDoc.save strXMLPath Set objXmlDoc = Nothing End Sub 这里xnl是一个结点的集合,removeAll就删除了所有结点。试着改为xn.removeAll,提示xn不支持这个removeAll的操作。 网上查寻了一下,node1.ParentNode.RemoveChild(node1); RemoveChild移除所有子节点 ParentNode父节点。从node1的父节点删除node1节点。(因为一般删除节点是没有包含自身结点的) 至此函数功能差不多完成了。 '========================================================================================================== Public Sub DeleteXMLNode(strXMLPath As String, strID As String, Path As String) Dim fNodeObj, AttributeNode, objXmlDoc, xnl, xn Dim i As Integer If Trim(strID) = "0" Then Exit Sub Set objXmlDoc = CreateObject("Microsoft.XMLDOM") objXmlDoc.async = False objXmlDoc.Load strXMLPath Set xnl = objXmlDoc.selectNodes(Path) For Each xn In xnl If xn.getAttribute("id") = Trim(strID) Then xn.parentNode.removeChild (xn) Exit For End If Next objXmlDoc.save strXMLPath Set objXmlDoc = Nothing End Sub 这里需要完善的是:判断子节点包含某值则删除该节点。 本文来源:http://blog.csdn.net/retty85/archive/2007/08/27/1760780.aspx
|