2017-12-29 7 views
0

C#でXMLからノードを削除しようとしていますが、何らかの理由でそれを削除できません。XMLでC#を持つノードを削除する

私は間違っていますか?

コードは正常に実行され、trueで応答しますが、XMLは変更されず、ノードは削除されません。

これは、削除するために私のコードです:

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; 
     } 
    } 

これは、WCFサービスで自分のXML結果である:

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

コードは完全に正常に動作します。おそらくあなたは間違った文字列を関数に渡しているでしょうか? XMLでは、名前の綴りは** camara **ですが、他の場所では** camera **を使用します。 – HaveSpacesuit

+0

はい、私はまた、完全に細かくチェックしました。あなたが渡している名前の値をチェックするだけです。 –

+0

名前に問題がある場合は、falseを返す必要があります。私は、私たちと共有されていない別のものがあると思います。 – lucky

答えて

-1

は皆さんありがとう、問題が含まアポストロフィだった前と後の(?)名前文字列。

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

xmlファイルを読み込むメソッドがある場合、変更を確認するためにサービスを再起動する必要があるのはなぜわかりません。

-1

xml linqを使用してください。 xmlの名前は "Camera1"ではなく "Camara1"です。

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(); 

     } 
    } 
} 
関連する問題