使用LINQ从XML中删除元素

6

我有一个像这样的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>

现在我需要删除任何<site>...</site>,而值将随机从文本框中给出。
以下是我的代码:
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");

如果我将第一个元素的值放入文本框中,那么它可以删除它,但是如果我放入除第一个元素以外的任何元素值,它就无法删除! 我希望能够输入任何元素的任何值...可能是第二个元素或第三个或第四个等等...有人能帮我吗?
1个回答

13

编辑:好的,经过进一步编辑,现在更清楚你想做什么了。而且,由于 IEnumerable<T> where T : XNode 上的Remove扩展方法,它实际上比你想象的要容易得多。

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

这就是你需要的全部内容。


1
当未在文本框中提供第一个元素的值时,deleteQuery返回一个空列表。 - Mushfiq
1
@Shishir:看一下我的编辑。由于你的代码使用了与示例 XML 完全不同的名称,并且你没有解释你真正想要发生什么,所以很难帮助你。 - Jon Skeet
1
@Shishir:现在好一些了,但是你没有展示要删除的“domain”元素。这样会让我们帮助你变得非常困难。 - Jon Skeet
2
非常感谢...我已经更新了我的问题。它将是qry.Element("site").Remove()。 - Mushfiq
1
@Shishir:在编辑了你的问题之后(你应该真的看一下预览),它变得更加清晰了...尽管你没有通过保持模糊来帮助自己。 - Jon Skeet
1
@Shishir:再看一遍。如果你一开始就清楚地表达了你的问题,所有这些都可以在第一次完成。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接