2012-05-23 75 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