我有XElement xDoc =
<div id="item123">
<div id="item456">
<h3 id="1483538342">
<span>Dessuten møtte</span>
</h3>
<p>Test!</p>
</div>
</div>
当我尝试删除id =“item456”的en项时,我收到错误
System.NullReferenceException: Object reference not set to an instance of an object.
var item = "456";
xDoc.Descendants("div").Where(s => s.Attribute("id").Value == "item" + item).Remove();
我无法理解这里有什么问题。
答案 0 :(得分:2)
您需要检查当前元素(where
迭代内部)是否具有id
属性,否则您将访问null对象并获得异常。
var item = "456";
xDoc.Descendants("div").Where(s => s.Attribute("id") != null && s.Attribute("id").Value == "item" + item).Remove();
答案 1 :(得分:1)
您的错误表示某些div
元素没有id
属性。因此s.Attribute("id")
会返回null
。试图获得它的价值会引发异常。如果您将属性转换为string
而不是尝试访问Value
,则不会收到错误(如果找不到属性,则会返回null
):
xDoc.Descendants("div")
.Where(d => (string)d.Attribute("id") == "item" + item)
.Remove();
因此,您正在处理HTML我建议您使用适当的工具 - HtmlAgilityPack。删除div节点将如下所示:
HtmlDocument doc = new HtmlDocument();
doc.Load(path_to_file);
foreach (var div in doc.DocumentNode.SelectNodes("//div[@id='item456']"))
div.Remove();