0

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

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

我希望你能看到我在哪里犯了错误。

4

1 回答 1

1

查看您的 XPath 表达式:

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

这需要一个名为Root. Member假设您确实给了我们一个代表文件,您的元素实际上被称为。您可能需要Tabel/Member/Naam- 我不记得在文档上使用 XPath 是否隐式从文档根元素开始。

我还没有检查您的其余代码,但至少值得先尝试一下。顺便说一句,您的代码实际上只会删除该Naam元素-我认为您可能想要:

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

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

就我个人而言,如果可能的话,我会使用 LINQ to XML——它会让生活变得更简单——但那是另一回事。

于 2012-05-23T16:57:44.510 回答