HTML in C-Sharp bearbeiten mit AngleSharp

Aus maxTechCorner

Auf einen Blick

Gilt für.NET 8/10 (Codebeispiele), AngleSharp 1.x und HtmlAgilityPack auch für .NET Framework 4.6.2+
BereichSoftwareentwicklung
Dauerca. 15 Minuten
RechteEntwicklungsumgebung
StandOktober 2026

HTML in C# bearbeiten – etwa Attribute entfernen, Links umschreiben oder Inhalte auslesen – gelingt zuverlässig nur mit einem echten HTML-Parser. Mit AngleSharp laden Sie HTML in ein DOM, wählen Elemente per CSS-Selektor aus wie in jQuery und geben das Ergebnis wieder als HTML aus.

HTML in C# bearbeiten: AngleSharp parst HTML in einen DOM-Baum, Elemente werden per CSS-Selektor ausgewählt und als HTML ausgegeben.

Problem

  • In einem HTML-String sollen bestimmte Attribute (z. B. style, onclick) oder Elemente entfernt werden.
  • Reguläre Ausdrücke versagen bei verschachteltem oder unsauberem HTML: Sie treffen zu viel, zu wenig oder zerstören das Markup.

Ursache

HTML ist keine reguläre Sprache – verschachtelte Tags, optionale Anführungszeichen und fehlerhaftes Markup lassen sich mit regulären Ausdrücken nicht sicher verarbeiten. Ein Parser baut dagegen wie ein Browser einen DOM-Baum auf.

Lösung mit AngleSharp

dotnet add package AngleSharp
using AngleSharp.Html.Parser;

public static class HtmlTools
{
    /// <summary>Entfernt ein Attribut aus allen Elementen, die auf den CSS-Selektor passen.</summary>
    /// <param name="html">HTML-Fragment oder komplettes Dokument</param>
    /// <param name="selector">CSS-Selektor, z. B. "div > ul li:first-child"</param>
    /// <param name="attributeName">Name des zu entfernenden Attributs</param>
    public static string RemoveAttribute(string html, string selector, string attributeName)
    {
        ArgumentException.ThrowIfNullOrWhiteSpace(selector);
        ArgumentException.ThrowIfNullOrWhiteSpace(attributeName);

        var parser = new HtmlParser();
        var document = parser.ParseDocument(html ?? string.Empty);

        foreach (var element in document.QuerySelectorAll(selector))
            element.RemoveAttribute(attributeName);

        return document.Body?.InnerHtml ?? string.Empty;   // Fragment zurückgeben
    }
}

Aufruf:

var cleaned = HtmlTools.RemoveAttribute(
    "<div><ul><li style=\"color:red\">Eins</li><li>Zwei</li></ul></div>",
    "div > ul li:first-child", "style");
// <div><ul><li>Eins</li><li>Zwei</li></ul></div>

QuerySelectorAll entspricht jQuerys $(selector); für ein komplettes Dokument statt eines Fragments document.DocumentElement.OuterHtml zurückgeben.

Alternative: HtmlAgilityPack

Die ebenfalls verbreitete Bibliothek HtmlAgilityPack arbeitet mit XPath statt CSS-Selektoren und ist besonders tolerant gegenüber fehlerhaftem HTML:

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
foreach (var node in doc.DocumentNode.SelectNodes("//li[@style]") ?? Enumerable.Empty<HtmlAgilityPack.HtmlNode>())
    node.Attributes.Remove("style");
var result = doc.DocumentNode.OuterHtml;

Hinweise

  • Nicht mehr verwenden: Die früher hier vorgestellte Bibliothek CsQuery wird seit Jahren nicht mehr gepflegt und unterstützt kein modernes .NET.
  • Sicherheit: Zum Entschärfen von Benutzereingaben (XSS) ist das Entfernen einzelner Attribute nicht ausreichend. Dafür einen Whitelist-basierten Sanitizer wie das NuGet-Paket HtmlSanitizer (baut auf AngleSharp auf) verwenden.
  • Performance: Den HtmlParser bei vielen Aufrufen wiederverwenden statt jedes Mal neu zu erzeugen.
  • Bei der Entwicklung von Web- und .NET-Anwendungen unterstützt Sie die individuelle Softwareentwicklung von m.a.x. it.

Siehe auch

Links und Quellen


Über m.a.x. it Die m.a.x. Informationstechnologie AG ist seit über 30 Jahren IT-Partner mittelständischer und großer Unternehmen in München und bietet maßgeschneiderte Lösungen und Services in den Bereichen Cloud, Cybersecurity, Netzwerk, Windows, Linux und Softwareentwicklung. Sie haben eine Frage zu diesem Artikel oder brauchen Unterstützung? Kontakt aufnehmen