使用 LINQ 从 xml 中删除元素

Posted

技术标签:

【中文标题】使用 LINQ 从 xml 中删除元素【英文标题】:delete element from xml using LINQ 【发布时间】:2012-11-09 03:00:13 【问题描述】:

我有一个 xml 文件,例如:

<starting>
   <start>
      <site>mushfiq.com</site>
      <site>mee.con</site>
      <site>ttttt.co</site>
      <site>jkjhkhjkh</site>
      <site>jhkhjkjhkhjkhjkjhkh</site>
     <site>dasdasdasdasdasdas</site>
 </start>
</starting>

现在我需要删除任何&lt;site&gt;...&lt;/site&gt;,然后会从文本框中随机给出值。

这是我的代码:

XDocument doc = XDocument.Load(@"AddedSites.xml");                
var deleteQuery = from r in doc.Descendants("start") where r.Element("site").Value == txt.Text.Trim() select r;
foreach (var qry in deleteQuery)

    qry.Element("site").Remove();

doc.Save(@"AddedSites.xml");

如果我把第一个元素的值放在文本框中,那么它可以删除它,但是如果我把除第一个元素的值之外的任何元素值都放在它不能删除!我需要输入任何元素的任何值...因为它可以是第 2 个元素或第 3 个或第 4 个等等....任何人都可以帮助我吗?

【问题讨论】:

【参考方案1】:

编辑:好的,通过进一步的编辑,你想做什么就更清楚了,而且由于Remove extension methodIEnumerable&lt;T&gt; where T : XNode上的Remove extension method,它比你做的要容易得多:

string target = txt.Text.Trim();
doc.Descendants("start")
   .Elements("site")
   .Where(x => x.Value == target)
   .Remove();

这就是你所需要的。

【讨论】:

deleteQuery 在文本框中没有给出第一个元素的值时正在返回一个空列表 @Shishir:看我的编辑。虽然您的代码使用了与示例 XML 完全不同的名称,而且您还没有解释您真正想要发生的事情,但很难为您提供帮助。 @Shishir:现在好多了,但是您还没有显示要删除的domain 元素。你很难帮助你。 非常感谢...我已经更新了我的问题。它将是 qry.Element("site").Remove() @Shishir:编辑了你的问题(你应该真的看看预览)它变得更清晰了......虽然你没有帮助自己这么模糊.

以上是关于使用 LINQ 从 xml 中删除元素的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ 从 ObservableCollection 源中删除元素 [重复]

使用 linq to xml 从 xml 文档中删除 xmlns="something"

LINQ:RemoveAll 并删除元素

c#在遍历列表时删除元素-向后迭代或使用i--或使用linq同时迭代和删除?

使用 Linq 删除 XML 中的子节点

如何使用 XSLT 从 XML 中删除元素标记