我的XML代码是这样的:
<?xml version="1.0" encoding="utf-8"?>
<Tabel>
<Member>
<Naam>Cruciatum</Naam>
<Kills>1000</Kills>
<Deaths>10</Deaths>
<KD>100</KD>
</Member>
<Member>
<Naam>Ghostbullet93</Naam>
<Kills>10</Kills>
<Deaths>1</Deaths>
<KD>10</KD>
</Member>
<Member>
<Naam>test</Naam>
<Kills>123</Kills>
<Deaths>11</Deaths>
<KD>11</KD>
</Member>
</Tabel>
处理完毕后,XML应该看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<Tabel>
<Member>
<Naam>Cruciatum</Naam>
<Kills>1000</Kills>
<Deaths>10</Deaths>
<KD>100</KD>
</Member>
<Member>
<Naam>Ghostbullet93</Naam>
<Kills>10</Kills>
<Deaths>1</Deaths>
<KD>10</KD>
</Member>
</Tabel>
经过一番搜索后,我想出了这段代码。
显然它适用于其他人,但根本不适用于我。
Private Sub btnDel_Click(sender As System.Object, e As System.EventArgs) Handles btnDel.Click
playername = lstmembers.SelectedItem.ToString
If MsgBox("Ben je zeker dat je " & playername & " wil verwijderen?", MsgBoxStyle.YesNo, "Confirmatie") = MsgBoxResult.Yes Then
Dim xmldoc As New XmlDocument()
xmldoc.load("C:\members.xml")
Dim node As XmlNode = xmldoc.SelectSingleNode("Root/Naam[. = '" & playername & "']")
If node IsNot Nothing Then
node.ParentNode.RemoveChild(node)
xmldoc.Save("C:\members.xml")
End If
'reload list
loadfile()
End If
End Sub
我没有任何例外,所以代码必须适合某些东西,而不是我显然需要的......
我希望你能看到我犯错的地方。
答案 0 :(得分:1)
查看你的XPath表达式:
"Root/Naam[. = '" & playername & "']"
期待一个名为Root
的元素。您的元素实际上称为Member
,假设您确实给了我们一个代表性文件。您可能需要Tabel/Member/Naam
- 我不记得是否在文档根元素上隐含地使用文档上的XPath。
我还没有检查过你的其余代码,但至少值得先尝试一下。 看起来就像你的代码实际上只是删除Naam
元素一样 - 我想你可能想要:
node.ParentNode.ParentNode.RemoveChild(node.ParentNode)
(当然,或者将node.ParentNode
提取到单独的局部变量。)
我个人会尽可能使用LINQ to XML - 它会让生活更简单 - 但这是另一回事。