所有答案都是一样的。使用单一代码
item.ParentNode.RemoveChild(item, true);
但我在我的代码中使用了它,但它不起作用。我收到了错误
Collection was modified; enumeration operation may not execute.
这是我现在的代码
try
{
string html = "<xml><span> some text </span><p><span> Hello</span> </p></xml>";
var htmlSpan = new HtmlDocument();
htmlSpan.LoadHtml(html);
var rootSpan = htmlSpan.DocumentNode;
var anchorsSpan = rootSpan.Descendants("span");
foreach (var item in anchorsSpan)
{
item.ParentNode.RemoveChild(item, true);
}
//htmlSpan.Save(fileName);
Console.WriteLine(htmlSpan.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
我在做什么是删除span标记,但保留是文本
所以输出必须是
<xml> some text <p> Hello </p></xml>
答案 0 :(得分:1)
使用
foreach (var item in anchorsSpan.ToArray())
{
item.ParentNode.RemoveChild(item, true);
}
Descendants
函数返回遍历它时构建的子元素的动态列表。因此,在遍历动态列表时不允许更改文档。解决方案是预先制作列表的静态副本(使用ToArray
)并遍历该数组。