2017-12-29 6 views
0

Ich versuche, einen Knoten aus XML mit C# zu löschen, aber aus irgendeinem Grund kann ich nicht.Lösche Knoten mit C# in XML

Was mache ich falsch?

Der Code läuft gut, mit True antworten, aber die XML nicht ändern und der Knoten wird nicht beseitigt.

Dies ist mein Code zu löschen: mein XML-Ergebnis mit WCF-Dienst

internal static bool DeleteCamera(string name) 
    { 
     XmlDocument xml = new XmlDocument(); 
     xml.Load("xmlpath.xml"); 
     XmlNode toDelete = xml.SelectSingleNode("//Camera[@Name='" + name + "']"); 
     if (toDelete == null) 
     { 
      return false; 
     } 
     else 
     { 
      toDelete.ParentNode.RemoveChild(toDelete); 
      xml.Save("xmlpath.xml"); 
      return true; 
     } 
    } 

Dies ist:

<Cameras> 
    <Camera Name="Camara1" Url="Camara1" Width="600" Height="800" /> 
    <Camera Name="Camara2" Url="Camara2" Width="600" Height="800" /> 
</Cameras> 
+2

Ihr Code läuft perfekt für mich. Vielleicht übergeben Sie die falsche Zeichenfolge an die Funktion? In der XML werden die Namen ** camara ** geschrieben, aber überall sonst benutzt du ** camera **. – HaveSpacesuit

+0

Ja, ich habe auch überprüft, es ist völlig in Ordnung. Überprüfen Sie einfach den Wert des Namens, den Sie übergeben. –

+0

Wenn es ein Problem mit Namen gibt, sollte es false zurückgeben. Ich denke, es gibt noch andere Dinge, die nicht mit uns geteilt werden. – lucky

Antwort

-1

Danke Jungs, war das Problem, das enthält Apostroph vor und nach (?) Name Zeichenfolge.

XmlNode toDelete = xml.SelectSingleNode("//Camera[@Name='" +name+ "']"); 

Aber ich weiß nicht, warum ich den Dienst neu zu starten, müssen die Änderungen zu sehen, ob ich eine Methode, die XML-Datei zu laden.

-1

Verwenden Sie XML linq. Der Name in XML ist "Camara1" und nicht "Camera1".

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      string removeName = "Camara1"; 
      XElement camera = doc.Descendants().Where(x => (x.Name.LocalName == "Camera") && ((string)x.Attribute("Name") == removeName)).FirstOrDefault(); 

      camera.Remove(); 

     } 
    } 
}