C# Can';不要删除XML中的元素

C# Can';不要删除XML中的元素,c#,html,xml,linq,xelement,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> 我不明白这里出

我有XElement xDoc=

<div id="item123">
    <div id="item456">
        <h3 id="1483538342">
           <span>Dessuten møtte</span> 
        </h3>
        <p>Test!</p> 
    </div>
</div>

我不明白这里出了什么问题。

您需要检查当前元素(在
where
迭代中)是否具有
id
属性,否则您将访问空对象并获得异常

var item = "456";
xDoc.Descendants("div").Where(s => s.Attribute("id") != null && s.Attribute("id").Value == "item" + item).Remove();

您需要检查当前元素(在
where
迭代中)是否具有
id
属性,否则您将访问空对象并获得异常

var item = "456";
xDoc.Descendants("div").Where(s => s.Attribute("id") != null && s.Attribute("id").Value == "item" + item).Remove();

您需要检查当前元素(在
where
迭代中)是否具有
id
属性,否则您将访问空对象并获得异常

var item = "456";
xDoc.Descendants("div").Where(s => s.Attribute("id") != null && s.Attribute("id").Value == "item" + item).Remove();

您需要检查当前元素(在
where
迭代中)是否具有
id
属性,否则您将访问空对象并获得异常

var item = "456";
xDoc.Descendants("div").Where(s => s.Attribute("id") != null && s.Attribute("id").Value == "item" + item).Remove();

您的错误意味着一些
div
元素没有
id
属性。因此
s.Attribute(“id”)
返回
null
。试图获取它的值会引发异常。如果您将属性强制转换为
字符串
,而不是尝试访问它的
,则不会出现错误(
null
,如果未找到属性,将返回):

也因此,您正在处理HTML,我建议您使用适当的工具-。删除div节点的过程如下所示:

HtmlDocument doc = new HtmlDocument();
doc.Load(path_to_file);
foreach (var div in doc.DocumentNode.SelectNodes("//div[@id='item456']"))
    div.Remove();

您的错误意味着一些
div
元素没有
id
属性。因此
s.Attribute(“id”)
返回
null
。试图获取它的值会引发异常。如果您将属性强制转换为
字符串
,而不是尝试访问它的
,则不会出现错误(
null
,如果未找到属性,将返回):

也因此,您正在处理HTML,我建议您使用适当的工具-。删除div节点的过程如下所示:

HtmlDocument doc = new HtmlDocument();
doc.Load(path_to_file);
foreach (var div in doc.DocumentNode.SelectNodes("//div[@id='item456']"))
    div.Remove();

您的错误意味着一些
div
元素没有
id
属性。因此
s.Attribute(“id”)
返回
null
。试图获取它的值会引发异常。如果您将属性强制转换为
字符串
,而不是尝试访问它的
,则不会出现错误(
null
,如果未找到属性,将返回):

也因此,您正在处理HTML,我建议您使用适当的工具-。删除div节点的过程如下所示:

HtmlDocument doc = new HtmlDocument();
doc.Load(path_to_file);
foreach (var div in doc.DocumentNode.SelectNodes("//div[@id='item456']"))
    div.Remove();

您的错误意味着一些
div
元素没有
id
属性。因此
s.Attribute(“id”)
返回
null
。试图获取它的值会引发异常。如果您将属性强制转换为
字符串
,而不是尝试访问它的
,则不会出现错误(
null
,如果未找到属性,将返回):

也因此,您正在处理HTML,我建议您使用适当的工具-。删除div节点的过程如下所示:

HtmlDocument doc = new HtmlDocument();
doc.Load(path_to_file);
foreach (var div in doc.DocumentNode.SelectNodes("//div[@id='item456']"))
    div.Remove();


“item”+item
将搜索属性值
“itemtime456”
。您的xml看起来像html…Adriano,输入错误。现在已经修好了。谢谢:)Sergey,html是一种XML。问题不在这里。@podeig不完全是-xml区分大小写,不允许使用not closed标记。因此,有效的html可能是无效的xml,解析将失败。我没说在你的样本中这是个问题。我只是建议对正确的数据使用正确的工具(参见我的答案)。
“item”+item
将搜索属性值
“item456”
。您的xml看起来像html…Adriano,输入错误。现在已经修好了。谢谢:)Sergey,html是一种XML。问题不在这里。@podeig不完全是-xml区分大小写,不允许使用not closed标记。因此,有效的html可能是无效的xml,解析将失败。我没说在你的样本中这是个问题。我只是建议对正确的数据使用正确的工具(参见我的答案)。
“item”+item
将搜索属性值
“item456”
。您的xml看起来像html…Adriano,输入错误。现在已经修好了。谢谢:)Sergey,html是一种XML。问题不在这里。@podeig不完全是-xml区分大小写,不允许使用not closed标记。因此,有效的html可能是无效的xml,解析将失败。我没说在你的样本中这是个问题。我只是建议对正确的数据使用正确的工具(参见我的答案)。
“item”+item
将搜索属性值
“item456”
。您的xml看起来像html…Adriano,输入错误。现在已经修好了。谢谢:)Sergey,html是一种XML。问题不在这里。@podeig不完全是-xml区分大小写,不允许使用not closed标记。因此,有效的html可能是无效的xml,解析将失败。我没说在你的样本中这是个问题。我只是建议对正确的数据使用正确的工具(见我的答案)。看来你是对的。我再也没有例外了。但这个元素仍然存在。它没有被删除。元素仍然在
xdoc
对象中,还是说它被持久化的文件?您可以使用
var elem=xDoc.substands(“div”).Where(s=>s.Attribute(“id”)!=null和&s.Attribute(“id”).Value==“item”+item.FirstOrDefault()。如果
elem
null
您的参数(“item456”)可能无效。一切正常。工作我在wronf place检查了结果。谢谢你的帮助,安德烈!:)看来你是对的。我再也没有例外了。但这个元素仍然存在。它没有被删除。元素仍然在
xdoc
对象中,还是说它被持久化的文件?您可以使用
var elem=xDoc.substands(“div”).Where(s=>s.Attribute(“id”)!=null和&s.Attribute(“id”).Value==“item”+item.FirstOrDefault()。如果
elem