Bearbeiten von HTML in C: Unterschied zwischen den Versionen
Alar (Diskussion | Beiträge) (→Weitere Informationen) |
Ansp (Diskussion | Beiträge) |
||
Zeile 40: | Zeile 40: | ||
Der Aufruf der Render()-Methode gibt den DOM-Inhalt des CQ-Objekts als HTML-String zurück. | Der Aufruf der Render()-Methode gibt den DOM-Inhalt des CQ-Objekts als HTML-String zurück. | ||
==='''Weitere Informationen'''=== | ==='''Weitere Informationen'''=== | ||
− | https:// | + | https://www.max-it.de/softwareloesungen/ |
==='''Links und Quellen'''=== | ==='''Links und Quellen'''=== |
Version vom 3. März 2017, 12:01 Uhr
Inhaltsverzeichnis
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.
Ursache und Lösung
HTML oder XML kann in der Regel nicht mit regulären Ausdrücken fehlerfrei untersucht werden [1].
Soll das Problem einfach und mit möglichst wenigen Abhängigkeiten zu anderen Komponenten gelöst werden, kann die Komponente CsQuery verwendet werden.
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]
Die hier gezeigte Lösung zum Entfernen von HTML-Attributen soll als Beispiel dafür dienen, wie einfach CsQuery verwendet werden kann.
/// <summary> /// Searches an HTML string for certain attributes and removes them. /// </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) { #region check preconditions if (s == null) { return null; } if (String.IsNullOrWhiteSpace(selector)) throw new ArgumentNullException("selector"); if (String.IsNullOrWhiteSpace(attributeName)) throw new ArgumentNullException("attributeName"); #endregion // 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()); }
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.
Der Aufruf der Render()-Methode gibt den DOM-Inhalt des CQ-Objekts als HTML-String zurück.
Weitere Informationen
https://www.max-it.de/softwareloesungen/
Links und Quellen
[1] https://stackoverflow.com/a/1732454, 30.09.2015
[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.
Über m.a.x. Informationstechnologie AG:
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.
Tags
.Net, C#, jQuery, CsQuery, HTML, XML, DOM manipulation, CSS selectors, CSS2, CSS3, server-side