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

나는 내 실수를 위치를 볼 수 있기를 바랍니다 ... 그냥 내가 분명히 필요를 위해,

를 예외를하지 않습니다. 당신의 XPath 표현식에서

답변

1

봐는 : 요소를 기대하고 있어요

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

Root을했다. 실제로 우리에게 대표 파일을 제공했다고 가정하면 요소는 실제로 Member이라고합니다. mayTabel/Member/Naam - 문서의 XPath를 문서 루트 요소에서 암시 적으로 사용할지 여부를 기억할 수 없습니다.

나머지 코드는 검사하지 않았지만 먼저 시도해 볼 가치가 있습니다. 그것은 실제로 단지 그런데, Naam 요소를 제거합니다 코드처럼 보이는 - 나는 당신이 할 수 있습니다 생각 :

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

(또는 물론 별도의 지역 변수에 node.ParentNode을 추출합니다.) 개인적으로 가능한 모든 경우에 LINQ를 XML에 사용하면 인생을 더 단순하게 만들 수 있지만 다른 문제입니다.

+0

이러한 문제를 해결하는 가장 빠른 방법은이를 통해 디버그하는 것입니다. 당신은 코드가 if 문을 통과하지 못한다는 것을 알게 될 것입니다. – user845279

+0

Oooh 알 겠어, 난 그냥 테이블의 루트에, 고맙다고 생각했다 :) – Yorrick

관련 문제