Bearbeiten von HTML in C: Unterschied zwischen den Versionen

Aus maxTechCorner
Keine Bearbeitungszusammenfassung
imported>TechCorner-Redaktion
Softwareentwicklung: Überarbeitung
 
(5 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
==='''Symptom'''===
== Symptom ==
HTML-Attribute in einer Zeichenkette sollen entfernt werden. Da die HTML-Struktur aber „zu kompliziert“ ist, können die Attribute nicht mit einem regulären Ausdruck zuverlässig gefunden und entfernt werden.
HTML-Attribute in einer Zeichenkette sollen entfernt werden. Da die HTML-Struktur zu komplex ist, lassen sich die Attribute mit regulären Ausdrücken nicht zuverlässig finden und entfernen.
==='''Ursache und Lösung'''===
 
HTML oder XML kann in der Regel nicht mit regulären Ausdrücken fehlerfrei untersucht werden '''[1]'''.<br />
== Ursache und Lösung ==
Soll das Problem einfach und mit möglichst wenigen Abhängigkeiten zu anderen Komponenten gelöst werden, kann die Komponente CsQuery verwendet werden.<br />
HTML/XML lässt sich mit regulären Ausdrücken nicht fehlerfrei verarbeiten. Mit möglichst wenigen Abhängigkeiten löst dies die Bibliothek '''CsQuery''', die die Funktionalität von jQuery (CSS2/CSS3-Selektoren, DOM-Bearbeitung) für C# bereitstellt:
CsQuery bietet die Funktionalität von jQuery für C# wie z. B. alle CSS2/CSS3-Selektoren und DOM-Bearbeitungen. Dadurch können HTML-Manipulationen am Server einfach durchgeführt werden. CsQuery bringt keine weiteren Abhängigkeiten zu anderen Komponenten mit. '''[2]'''<br />
<syntaxhighlight lang="csharp">
Die hier gezeigte Lösung zum Entfernen von HTML-Attributen soll als Beispiel dafür dienen, wie einfach CsQuery verwendet werden kann.
/// <summary>Sucht in einem HTML-String bestimmte Attribute und entfernt sie.</summary>
<pre> /// <summary>
/// <param name="selector">z. B. "div>ul li:first-child"</param>
/// Searches an HTML string for certain attributes and removes them.
/// <param name="attributeName">Name des zu entfernenden Attributs</param>
/// </summary>
/// <param name="s"></param>
/// <param name="selector">ex: "div>ul li:first-child"</param>
/// <param name="attributeName">The name of the attribute that should be removed</param>
/// <returns>The resulting HTML string.</returns>
public static IHtmlString RemoveAttribute(this IHtmlString s, String selector, String attributeName)
public static IHtmlString RemoveAttribute(this IHtmlString s, String selector, String attributeName)
{
{
#region check preconditions
    if (s == null) return null;
    if (String.IsNullOrWhiteSpace(selector)) throw new ArgumentNullException("selector");
    if (String.IsNullOrWhiteSpace(attributeName)) throw new ArgumentNullException("attributeName");


if (s == null)
    // CsQuery mit dem HTML-String initialisieren
{
    CQ q = CQ.Create(s.ToString());
return null;
    // Elemente per Selektor auswaehlen und Attribut entfernen
}
    q[selector].RemoveAttr(attributeName);
 
    // manipuliertes DOM als String zurueckgeben
if (String.IsNullOrWhiteSpace(selector)) throw new ArgumentNullException("selector");
    return new HtmlString(q.Render());
if (String.IsNullOrWhiteSpace(attributeName)) throw new ArgumentNullException("attributeName");
}
</syntaxhighlight>
Der Aufruf <code>q[selector]</code> entspricht jQuerys <code>find(selector)</code>; <code>RemoveAttr()</code> entfernt das Attribut, <code>Render()</code> gibt das DOM als HTML-String zurück.
{{Hinweis|CsQuery wird nicht mehr aktiv gepflegt. Als moderne Alternative für serverseitiges HTML-Parsing in .NET eignet sich z. B. AngleSharp.}}


#endregion
== Links und Quellen ==
 
* [https://github.com/jamietre/CsQuery CsQuery auf GitHub]
// instantiate CsQuery and initialize with the HTML string
CQ q = CQ.Create(s.ToString());
 
// select elements using <selector> and remove attributes
q[selector].RemoveAttr(attributeName);
 
// render the manipulated DOM and return it as a string
return new HtmlString(q.Render());
}
</pre>
Dieser Code erzeugt ein CQ-Objekt und initialisiert es mit dem anfänglichen HTML-Inhalt. Dies kann ein vollständiges HTML-Dokument, aber auch nur ein Teil davon sein. Der Aufruf des Indexers „q[selector]“ entspricht dem jQuery-Aufruf von „find(selector)“ und gibt eine Auflistung der Elemente zurück, die vom angegebenen Selektor ausgewählt werden. Auf jedes Element dieser Ergebnismenge wird schließlich die Methode „RemoveAttr()“ angewendet.<br />
Der Aufruf der Render()-Methode gibt den DOM-Inhalt des CQ-Objekts als HTML-String zurück.
==='''Weitere Informationen'''===
Mehr Informationen zu unseren Softwarelösungen und Services finden Sie auf [https://www.max-it.de/techcorner/Bearbeiten_von_HTML_in_C https://www.max-it.de/Softwarelösungen]


==='''Links und Quellen'''===
== Unterstützung von m.a.x. it ==
'''[1]''' https://stackoverflow.com/a/1732454, 30.09.2015<br />
Bei plattformübergreifender App- und Software­entwicklung unterstützt Sie m.a.x. it mit [https://www.max-it.de/development/individuelle-softwareentwicklung/ individueller Softwareentwicklung].
'''[2]''' https://github.com/jamietre/CsQuery, 30.09.2015
=== '''Kontakt''' ===
Wenn Sie Fragen oder Anmerkungen zu diesem Artikel haben, melden Sie sich bitte bei uns: mailto:techcorner@max-it.de.<br />


Über m.a.x. Informationstechnologie AG: <br />
{{Uebermax}}
Als etabliertes Münchner Systemhaus zeichnen wir uns seit 1989 als verlässlicher IT-Partner mittelständischer und großer Unternehmen aus. Unser Portfolio reicht von IT- Services über individuelle Softwareentwicklung bis hin zur ERP-Beratung.<br />
[[Kategorie:Softwareentwicklung]]
=== '''Tags''' ===
.Net, C#, jQuery, CsQuery, HTML, XML, DOM manipulation, CSS selectors, CSS2, CSS3, server-side


[[Kategorie: Softwareentwicklung]]

Aktuelle Version vom 15. September 2026, 00:00 Uhr

Symptom

HTML-Attribute in einer Zeichenkette sollen entfernt werden. Da die HTML-Struktur zu komplex ist, lassen sich die Attribute mit regulären Ausdrücken nicht zuverlässig finden und entfernen.

Ursache und Lösung

HTML/XML lässt sich mit regulären Ausdrücken nicht fehlerfrei verarbeiten. Mit möglichst wenigen Abhängigkeiten löst dies die Bibliothek CsQuery, die die Funktionalität von jQuery (CSS2/CSS3-Selektoren, DOM-Bearbeitung) für C# bereitstellt:

/// <summary>Sucht in einem HTML-String bestimmte Attribute und entfernt sie.</summary>
/// <param name="selector">z. B. "div>ul li:first-child"</param>
/// <param name="attributeName">Name des zu entfernenden Attributs</param>
public static IHtmlString RemoveAttribute(this IHtmlString s, String selector, String attributeName)
{
    if (s == null) return null;
    if (String.IsNullOrWhiteSpace(selector)) throw new ArgumentNullException("selector");
    if (String.IsNullOrWhiteSpace(attributeName)) throw new ArgumentNullException("attributeName");

    // CsQuery mit dem HTML-String initialisieren
    CQ q = CQ.Create(s.ToString());
    // Elemente per Selektor auswaehlen und Attribut entfernen
    q[selector].RemoveAttr(attributeName);
    // manipuliertes DOM als String zurueckgeben
    return new HtmlString(q.Render());
}

Der Aufruf q[selector] entspricht jQuerys find(selector); RemoveAttr() entfernt das Attribut, Render() gibt das DOM als HTML-String zurück.

HinweisCsQuery wird nicht mehr aktiv gepflegt. Als moderne Alternative für serverseitiges HTML-Parsing in .NET eignet sich z. B. AngleSharp.

Links und Quellen

Unterstützung von m.a.x. it

Bei plattformübergreifender App- und Software­entwicklung unterstützt Sie m.a.x. it mit individueller Softwareentwicklung.


Ü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