我尝试使用LINQ和XDocument根据特定条件从XML文档中删除条目:
xml.Descendants("Photos").Where(e => e.Attribute("File").Value.Equals(ID)).Remove();
但是,如果找不到条目,则会抛出 NullReferenceException 错误。我试图计算所有匹配的元素,但不幸的是我得到了同样的错误:
public void Delete(string ID)
{
XDocument xml = XDocument.Load(xmlPath);
var count = xml.Descendants("Photos").Where(e => e.Attribute("File").Value.Equals(ID)).Count();
if (count >= 1)
{
xml.Descendants("Photos").Where(e => e.Attribute("File").Value.Equals(ID)).Remove();
}
}
但是这次它会在xml...Count()
行返回错误。
有关如何找出匹配元素的建议吗?
谢谢
答案 0 :(得分:3)
问题在于:
e.Attribute("File").Value.Equals(ID)
如果此属性不存在,您将获得NullReferenceException
。相反,您可以使用explicit conversion operator来获益:
var count = xml.Descendants("Photos")
.Where(e => (string) e.Attribute("File") == ID)
.Count();
但这部分并不是真的需要,所以只需直接删除这些项目:
xml.Descendants("Photos")
.Where(e => (string) e.Attribute("File") == ID)
.Remove();
答案 1 :(得分:2)
请勿使用Value
属性。使用显式强制转换并使用==
.Where(e => (string) e.Attribute("File") == ID)
如果找不到Attribute
,则不会抛出异常,而是会返回null
。