【问题标题】:why does HtmlAgilityPack Reverse Output为什么 HtmlAgilityPack 反向输出
【发布时间】:2017-11-26 16:14:11
【问题描述】:

如果类值为"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>

它是怎么变成这样的?

谢谢。

【问题讨论】:

    标签: c# html html-agility-pack


    【解决方案1】:

    基于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");
    

    已编辑

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

    【讨论】:

    • 但是输出还是一样
    • 查看我编辑的代码,它保留了顺序。我也用你的 html 代码测试了它:)
    猜你喜欢
    • 2012-06-13
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多