2012-05-23 40 views
0

我的XML代码是这样的:为什么不正确地移除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

看看你的XPath表达式:

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

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

我还没有检查过其他代码,但至少值得一试。它看起来像你的代码实际上只是删除Naam元素,顺便说一句 - 我想你可能想:

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

(或提取node.ParentNode到一个单独的局部变量,当然)。就我个人而言,如果可能的话,我会使用LINQ to XML - 它会使生活变得更简单 - 但这是另一回事。

+0

解决这些问题的最快方法是通过它进行调试。你会注意到你的代码在你删除的地方没有通过if语句。 – user845279

+0

哦,我看到了,我以为它只是提到了桌子的根部,谢谢:) – Yorrick