C#:从 xml 中删除一个元素
C#: delete an element from xml
我确实从 C# WinFroms 级别写入和读取 xml 文件。另外我想有一个功能来删除具有给定内容的元素。
我的 xml 格式:
<libraryImages>
<imageLink>*link1*</imageLink>
<imageLink>*link2*</imageLink>
</libraryImages>
函数体:
System.Xml.Linq.XDocument xdoc = System.Xml.Linq.XDocument.Load("XmlData.xml");
xdoc.Root.Elements("imageLink").Select(el => el).Where(el => el.Value == pathToRemove).ToList().ForEach(el => el.Remove());
例如,作为 'pathToRemove' 参数,我传递了 link1。
问题是 - 这不会从 xml 中删除此元素 - 因此在我重新启动我的应用程序后,我的库的内容与以前一样,就好像我没有删除任何项目一样。
为什么这不起作用?我浏览了许多 Whosebug 问题,但我什么也没发现。
您应该在内存操作后更新 xml 文件:
// read file from disc and build in-memory representation of xml
var xdoc = XDocument.Load("XmlData.xml");
// modify in-memory representation
xdoc.Root.Elements("imageLink").Where(el => el.Value == pathToRemove).Remove();
// save modified representation back to disck
xdoc.Save("XmlData.xml");
我确实从 C# WinFroms 级别写入和读取 xml 文件。另外我想有一个功能来删除具有给定内容的元素。 我的 xml 格式:
<libraryImages>
<imageLink>*link1*</imageLink>
<imageLink>*link2*</imageLink>
</libraryImages>
函数体:
System.Xml.Linq.XDocument xdoc = System.Xml.Linq.XDocument.Load("XmlData.xml");
xdoc.Root.Elements("imageLink").Select(el => el).Where(el => el.Value == pathToRemove).ToList().ForEach(el => el.Remove());
例如,作为 'pathToRemove' 参数,我传递了 link1。 问题是 - 这不会从 xml 中删除此元素 - 因此在我重新启动我的应用程序后,我的库的内容与以前一样,就好像我没有删除任何项目一样。 为什么这不起作用?我浏览了许多 Whosebug 问题,但我什么也没发现。
您应该在内存操作后更新 xml 文件:
// read file from disc and build in-memory representation of xml
var xdoc = XDocument.Load("XmlData.xml");
// modify in-memory representation
xdoc.Root.Elements("imageLink").Where(el => el.Value == pathToRemove).Remove();
// save modified representation back to disck
xdoc.Save("XmlData.xml");