我正在尝试使用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>
答案 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();
}
}
}