MSXML删除节点不按预期方式运行
我正试图从下面的XML中删除一个节点 – 下面的数据只是代表了实际的数据:
<StaffMembers> <Staff Name="Test1" Date="Date1"/> <Staff Name="Test2" Date="Date2"/> </StaffMembers>
我的代码如下:
Sub DeleteRecord(strName as string, strDate as string) 'Load Document Set xList = xDoc.SelectNodes("//StaffMembers/") for each xNode in xList If xNode.Attributes.Length > 0 And xNode.Attributes.getNamedItem("Date").NodeValue = strDate Then xnode.parentnode.removechild xnode exit for End if next xNode 'Save Document End Sub
生成的XML – 如您所见,它不完整:
<StaffMembers> <Staff Name="Test1" Date="Date1"/> <Staff Name="Tes
select了正确的节点,但只是部分删除。 如果我在记事本中打开生成的XML,那么节点的一些文本仍然存在。 任何人都可以解释吗?
编辑:
我已经尝试删除每个属性单独删除元素之前。 这遭受同样的问题。
谢谢
您可以使用XPath来select具有匹配属性条件的节点。 例如 :
..... Set xList = xDoc.SelectNodes("//StaffMembers/Staff[@Date='Date2']") For Each xnode In xList xnode.ParentNode.RemoveChild xnode Next xnode .....
这是一个XPathselect器,它将select那些名为Test2
或 Test3
节点:
xDoc.SelectNodes("//Staff[@Name = ""Test2"" || @Name = ""Test3""]")
对于下面的testingVBScript程序,我删除这些节点后得到以下输出:
<StaffMembers> <Staff Name="Test1" Date="Date1"/> <Staff Name="Test4" Date="Date4"/> </StaffMembers>
testing程序:
Option Explicit DeleteRecord "Test2", "Test3" Sub DeleteRecord(name1, name2) Dim xDoc : Set xDoc = CreateObject("Msxml2.DOMDocument") xDoc.LoadXML GetXml() Dim xList : Set xList = xDoc.SelectNodes _ ("//Staff[@Name = """ & name1 & """ || @Name = """ & name2 & """]") Dim xNode For Each xNode in xList xNode.ParentNode.RemoveChild xNode Next WScript.Echo xDoc.Xml End Sub Function GetXml() Dim NL : NL = vbNewLine GetXmL = _ "<StaffMembers>" &NL& _ " <Staff Name='Test1' Date='Date1'/>" &NL& _ " <Staff Name='Test2' Date='Date2'/>" &NL& _ " <Staff Name='Test3' Date='Date3'/>" &NL& _ " <Staff Name='Test4' Date='Date4'/>" &NL& _ "</StaffMembers>" End Function
感谢您的答复。 我已经设法缩小了networking连接速度慢的问题。 保存到本地文件夹时不会发生损坏。
谢谢