Html Agility Pack - Entfernen Sie Tags nach ID oder Klasse

c# html-agility-pack

Frage

Hier ist mein vereinfachter HTML:

<html>
  <body>
    <div id="mainDiv">
       <div id="divToRemove"></div>
       <div id="divToKeep"></div>
       <div class="divToRemove"></div>
       <div class="divToRemove"></div>
    </div>
  </body>
</html>

Ich möchte die divs mit ID oder Klasse mit dem Namen "divToRemove" entfernen und dann möchte ich nur das div namens "mainDiv" (in einem HtmlNode) auswählen.

Die Ergebnisse sollten sein:

   <div id="mainDiv">
       <div id="divToKeep"></div>
   </div>

Wie kann ich das mit dem Html Agility Pack machen?

Vielen Dank!

Akzeptierte Antwort

Der folgende Code ist eine von diesem Html Agility Pack angepasste Forum-Seite , die Ihren Bedürfnissen entspricht. Im Wesentlichen werden wir alle divs packen und dann durchlaufen sie und überprüfen Sie ihre Klasse oder ihre ID für eine Übereinstimmung. Wenn es da ist, entferne es.

var divs = htmldoc.DocumentNode.SelectNodes("//div");
if (divs != null)
{
    foreach (var tag in divs)
    {
        if (tag.Attributes["class"] != null && string.Compare(tag.Attributes["class"].Value, "divToRemove", StringComparison.InvariantCultureIgnoreCase) == 0)
        {
            tag.Remove();
        } else if(tag.Attributes["id"] != null && string.Compare(tag.Attributes["id"].Value, "divToRemove", StringComparison.InvariantCultureIgnoreCase) == 0) {
            tag.Remove();
        }
    }
}

Sie können diese if-Anweisungen auch zu einer großen if-Anweisung zusammenfassen, aber ich dachte, dies lies sich besser für die Antwort.

Wählen Sie schließlich den Knoten, den Sie gesucht haben ...

var mainDiv = htmldoc.DocumentNode.SelectSingleNode("//div[@id='mainDiv']");

Beliebte Antwort

Persönlich bevorzuge ich die Linq-Methoden von HtmlAgilityPack. Die Auswahl ist lang, aber relativ einfach. Wählen Sie einfach die Knoten mit der richtigen ID und / oder Klasse aus und rufen Remove() dann die Remove() -Methode darauf auf.

foreach (var node in doc.DocumentNode.Descendants("div")
    .Where(n => n.Id.Equals("divToRemove", StringComparison.InvariantCultureIgnoreCase) 
        || n.GetAttributeValue("class", string.Empty).Equals("divToRemove", StringComparison.InvariantCultureIgnoreCase)))
    node.Remove();
HtmlNode mainNode = doc.DocumentNode.Descendants("div").Where(n => n.Id.Equals("mainDiv", StringComparison.InvariantCultureIgnoreCase).First();


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum