无法删除XML中的元素

时间:2014-01-14 10:40:19

标签: c# html xml linq xelement

我有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();

我无法理解这里有什么问题。

2 个答案:

答案 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();