删除XML中带有C#的节点
我正试图用C#从XML中删除一个节点,但由于某些原因,我无法删除 我做错了什么 代码运行良好,响应为true,但XML没有改变,节点也没有消除 这是我要删除的代码:删除XML中带有C#的节点,c#,xml,C#,Xml,我正试图用C#从XML中删除一个节点,但由于某些原因,我无法删除 我做错了什么 代码运行良好,响应为true,但XML没有改变,节点也没有消除 这是我要删除的代码: internal static bool DeleteCamera(string name) { XmlDocument xml = new XmlDocument(); xml.Load("xmlpath.xml"); XmlNode toDelete = xml.Selec
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>
谢谢大家,问题在于名称字符串前后包含撇号(?)
XmlNode toDelete = xml.SelectSingleNode("//Camera[@Name='" +name+ "']");
但是,如果我有加载xml文件的方法,我不知道为什么需要重新启动服务来查看更改。使用xml linq。xml中的名称是“Camara1”而不是“Camera1”
你的代码对我来说运行得很好。也许您向函数传递了错误的字符串?在XML中,名称拼写为camara,但在其他地方使用camera。是的,我也检查了它。只需检查您正在传递的名称的值。如果名称有问题,它应该返回false。我想,还有另外一些东西是我们不能分享的。这对像
“
(包含撇号)这样的名字不起作用
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();
}
}
}