使用XML中的C#删除节点

时间:2017-12-29 20:54:10

标签: c# xml

我正在尝试使用C#从XML中删除节点,但由于某种原因我不能。

我做错了什么?

代码运行良好,以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 个答案:

答案 0 :(得分:-1)

谢谢大家,问题是在名字字符串之前和之后包含撇号(?)。

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

但是我不知道为什么我需要重新启动服务才能看到更改,如果我有一个方法来加载xml文件。

答案 1 :(得分:-1)

使用xml linq。 xml中的名称是“Camara1”而不是“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();

        }
    }
}