不能使用Linq查询删除XmlElement
本文关键字:删除 XmlElement 查询 Linq 不能 | 更新日期: 2023-09-27 18:10:00
我有一个非常基本的linq查询,能够从xml文件中删除一个节点。但是当我运行这段代码时,我得到了下面的异常:
Sequence contains no elements
然后我使用了FirstOrDefault()代替First()(如前面提到的帖子),这次Exection消息变成了这个
Object reference not set to an instance of an object.
我的代码
protected void Page_Load(object sender, EventArgs e)
{
XDocument doc = XDocument.Load(Server.MapPath("Kitaplar.xml"));
var toDelete = (from data in doc.Elements("Kitap") where data.Attribute("id").Value == "1" select data).FirstOrDefault();
toDelete.Remove();
doc.Save(Server.MapPath("Kitaplar.xml"));
}
这是xmlfile
<?xml version="1.0" encoding="utf-8"?>
<Kitaplar>
<Kitap id="1">
<Kitapadi>asasa</Kitapadi>
<Yazar>sasas</Yazar>
<Sayfa>22</Sayfa>
</Kitap>
<Kitap id="2">
<Kitapadi>jhjh</Kitapadi>
<Yazar>kjkj</Yazar>
<Sayfa>33</Sayfa>
</Kitap>
<Kitap id="3">
<Kitapadi>lkjhg</Kitapadi>
<Yazar>gffd</Yazar>
<Sayfa>988</Sayfa>
</Kitap>
<Kitap id="4">
<Kitapadi>lkjhg</Kitapadi>
<Yazar>gffd</Yazar>
<Sayfa>988</Sayfa>
</Kitap>
</Kitaplar>
在我看来一切都很好。我哪里做错了?
我冒昧地写了一个方法,它接受文件、元素和ID;然后删除相应的元素。
private bool DeleteRowWithID(string fileName, string element, string id)
{
XDocument doc = XDocument.Load(fileName);
if (doc.Root == null)
return false;
XElement toRemove = doc.Root.Elements(element).Where(e => e.Attribute("id").Value == id).FirstOrDefault();
if (toRemove == null)
return false;
toRemove.Remove();
doc.Save(fileName);
return true;
}
上面的方法在XDocument中加载XmlDocument(允许LINQ到XML)。它检查根目录是否为空,然后找到您指定的元素。
检查元素是否存在;然后从文档中删除该元素,并保存已删除的内容。
最后,它返回true,表示该元素实际上已被删除。
如果你只是想要元素并坚持使用你的方法,使用以下命令:
XElement toRemove = doc.Root.Elements("Kitap").Where(e => e.Attribute("id").Value == "1").FirstOrDefault();