我正在尝试从以下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
选择了正确的节点,但仅部分删除了该节点。如果我在记事本中打开生成的XML,则该节点的某些文本仍然存在。谁能解释一下呢?
编辑:
我尝试在删除元素之前单独删除每个属性。这也遇到了同样的问题。
谢谢
答案 0 :(得分:1)
您可以使用XPath选择具有匹配属性条件的节点。例如:
.....
Set xList = xDoc.SelectNodes("//StaffMembers/Staff[@Date='Date2']")
For Each xnode In xList
xnode.ParentNode.RemoveChild xnode
Next xnode
.....
答案 1 :(得分:0)
这是一个XPath选择器,它将选择名为Test2
或 Test3
的节点:
xDoc.SelectNodes("//Staff[@Name = ""Test2"" || @Name = ""Test3""]")
对于下面的测试VBScript程序,删除这些节点后得到以下输出:
<StaffMembers>
<Staff Name="Test1" Date="Date1"/>
<Staff Name="Test4" Date="Date4"/>
</StaffMembers>
测试计划:
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
答案 2 :(得分:0)
感谢您的回复。我设法将问题缩小到缓慢的网络连接。保存到本地文件夹时不会发生损坏。
由于