2017-06-23 1 views
1

je dois enlever l'étiquette si la valeur de la classe est "Section2 RenderAsSection2"pourquoi est-HtmlAgilityPack sortie inversée

C'est l'entrée

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

et cela devrait être la sortie

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

c'est mon code

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


        } 


       } 

      } 

Mais la sortie est

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

Comment cela est-il devenu ainsi?

Merci.

Répondre

0

Basé sur this answer, vous pouvez simplifier votre code comme suit:

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

ÉDITÉ:

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

Mais la sortie est toujours le même –

+0

Vérifiez mon code modifié, il préserve la commande. Je l'ai testé avec votre code html aussi :) –