2017-06-23 52 views
1

我需要的,如果这个类值是"Section2 RenderAsSection2"为什么HtmlAgilityPack反向输出

这是输入

<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> 

这是怎么回事?

谢谢。

回答

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(); 
} 
+0

但产量仍然是相同的 –

+0

看看我编辑的代码,它保留了订购。我用你的html代码测试它:) –