Entfernen Sie Attribute mithilfe von HtmlAgilityPack

html html-agility-pack html-parsing

Frage

Ich versuche , einen Code - Schnipsel zu erstellen , um alle entfernen style Attribute unabhängig von Tag mit HtmlAgilityPack .

Hier ist mein Code:

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

Aber ich bekomme es nicht zu halten? Wenn ich an dem aussehen element Objekt unmittelbar nach dem Remove("style") . Ich kann sehen, dass das style-Attribut entfernt wurde , aber es erscheint immer noch im DocumentNode Objekt. : /

Ich fühle mich ein bisschen blöd, aber es scheint mir so. Hat jemand das mit HtmlAgilityPack gemacht? Vielen Dank!

Aktualisieren

Ich habe meinen Code folgendermaßen geändert und es funktioniert ordnungsgemäß:

public static void RemoveStyleAttributes(this HtmlDocument html)
{
   var elementsWithStyleAttribute = html.DocumentNode.SelectNodes("//@style");

   if (elementsWithStyleAttribute!=null)
   {
      foreach (var element in elementsWithStyleAttribute)
      {
         element.Attributes["style"].Remove();
      }
   }
}

Akzeptierte Antwort

Ihr Code-Snippet scheint korrekt zu sein - es entfernt die Attribute. Die Sache ist, DocumentNode .InnerHtml (ich nehme an, dass Sie diese Eigenschaft überwacht) ist eine komplexe Eigenschaft, vielleicht wird es nach einigen unbekannten Umständen aktualisiert und Sie sollten diese Eigenschaft nicht verwenden, um das Dokument als String zu erhalten. Statt dessen HtmlDocument.Save Methode dafür:

string result = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    result = writer.ToString();
}

Die result enthält nun die Zeichenfolgendarstellung Ihres Dokuments.

Eine weitere Sache: Ihr Code kann durch das Ändern Ihrer Expression zu verbessern "//*[@style]" , die Sie nur Elemente mit bekommt style - Attribute.


Beliebte Antwort

Hier ist eine sehr einfache Lösung

VB.net

element.Attributes.Remove(element.Attributes("style"))

c #

element.Attributes.Remove(element.Attributes["style"])


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