C# Can';不要删除XML中的元素
我有XElement xDoc=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> 我不明白这里出
<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
是