HTML in C-Sharp bearbeiten mit AngleSharp
Auf einen Blick
| Gilt für | .NET 8/10 (Codebeispiele), AngleSharp 1.x und HtmlAgilityPack auch für .NET Framework 4.6.2+ |
|---|---|
| Bereich | Softwareentwicklung |
| Dauer | ca. 15 Minuten |
| Rechte | Entwicklungsumgebung |
| Stand | Oktober 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.

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