为什么不正确删除XML节点?

时间:2012-05-23 16:48:39

标签: xml vb.net-2010 xmldocument

我的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

我没有任何例外,所以代码必须适合某些东西,而不是我显然需要的......

我希望你能看到我犯错的地方。

1 个答案:

答案 0 :(得分:1)

查看你的XPath表达式:

"Root/Naam[. = '" & playername & "']"

期待一个名为Root的元素。您的元素实际上称为Member,假设您确实给了我们一个代表性文件。您可能需要Tabel/Member/Naam - 我不记得是否在文档根元素上隐含地使用文档上的XPath。

我还没有检查过你的其余代码,但至少值得先尝试一下。 看起来就像你的代码实际上只是删除Naam元素一样 - 我想你可能想要:

node.ParentNode.ParentNode.RemoveChild(node.ParentNode)

(当然,或者将node.ParentNode提取到单独的局部变量。)

我个人会尽可能使用LINQ to XML - 它会让生活更简单 - 但这是另一回事。