为什么HtmlAgilityPack反向输出

时间:2017-06-23 07:20:01

标签: c# html html-agility-pack

如果类值为"Section2 RenderAsSection2"

,我需要删除标记

这是输入

    <body>
<div id="Sec3" class="Section2 RenderAsSection2">
<h3 class="Heading"><span class="HeadingNumber">1.1.2 </span>Text1</h3>
<div class="Para ParaOneEmphasisChild">Text 2 <span class="EmphasisTypeItalic">decay</span>. Text3</div><div class="Para">Text4 <span class="EmphasisTypeItalic">decay</span> processes.</div>
</div>
</body>

这应该是输出

<body>

<h3 class="Heading"><span class="HeadingNumber">1.1.2 </span>Text1</h3>
<div class="Para ParaOneEmphasisChild">Text 2 <span class="EmphasisTypeItalic">decay</span>. Text3</div><div class="Para">Text4 <span class="EmphasisTypeItalic">decay</span> processes.</div>

</body>

这是我的代码

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.Load(@"1.html");

            var en = doc.DocumentNode.Descendants("div");
            var ll = en.ToList();

            foreach (var item in ll)
            {
                foreach (var att in item.Attributes)
                {
                    if (att.Value == "Section2 RenderAsSection2")
                    {

                            item.ParentNode.RemoveChild(item, true);


                    }


                }

            }

但输出是

<body>

<div class="Para">Text4 <span class="EmphasisTypeItalic">decay</span> processes.</div><div class="Para ParaOneEmphasisChild">Text 2 <span class="EmphasisTypeItalic">decay</span>. Text3</div>
<h3 class="Heading"><span class="HeadingNumber">1.1.2 </span>Text1</h3>

</body>

它是如何变成那样的?

谢谢。

1 个答案:

答案 0 :(得分:0)

基于this answer,您可以按如下方式简化代码:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(@"1.html");

var en = doc.DocumentNode.Descendants( "div" ).Where( d => d.Attributes.Contains("class") && d.Attributes["class"].Value  == "Section2 RenderAsSection2");

<强> EDITED

foreach (var item in en)
{
    foreach (HtmlNode child in item.ChildNodes)
    {
        item.ParentNode.InsertBefore(child, item);
    }
    item.Remove();
}