Bearbeiten von HTML in C: Unterschied zwischen den Versionen
Anki (Diskussion | Beiträge) |
Deko (Diskussion | Beiträge) |
||
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 aber „zu kompliziert“ ist, können die Attribute nicht mit einem regulären Ausdruck<br /> |
+ | zuverlässig gefunden und entfernt werden. | ||
+ | |||
==='''Ursache und Lösung'''=== | ==='''Ursache und Lösung'''=== | ||
HTML oder XML kann in der Regel nicht mit regulären Ausdrücken fehlerfrei untersucht werden '''[1]'''.<br /> | HTML oder XML kann in der Regel nicht mit regulären Ausdrücken fehlerfrei untersucht werden '''[1]'''.<br /> | ||
− | Soll das Problem einfach und mit möglichst wenigen Abhängigkeiten zu anderen Komponenten gelöst werden, kann die Komponente CsQuery verwendet werden.<br /> | + | Soll das Problem einfach und mit möglichst wenigen Abhängigkeiten zu anderen Komponenten gelöst werden,<br /> |
− | 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 /> | + | kann die Komponente CsQuery verwendet werden.<br /> |
+ | CsQuery bietet die Funktionalität von jQuery für C# wie z. B. alle CSS2/CSS3-Selektoren und DOM-Bearbeitungen.<br /> | ||
+ | Dadurch können HTML-Manipulationen am Server einfach durchgeführt werden. CsQuery bringt keine weiteren Abhängigkeiten zu anderen Komponenten mit. '''[2]'''<br /> | ||
Die hier gezeigte Lösung zum Entfernen von HTML-Attributen soll als Beispiel dafür dienen, wie einfach CsQuery verwendet werden kann. | Die hier gezeigte Lösung zum Entfernen von HTML-Attributen soll als Beispiel dafür dienen, wie einfach CsQuery verwendet werden kann. | ||
<pre> /// <summary> | <pre> /// <summary> | ||
Zeile 37: | Zeile 41: | ||
} | } | ||
</pre> | </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 /> | + | Dieser Code erzeugt ein CQ-Objekt und initialisiert es mit dem anfänglichen HTML-Inhalt. Dies kann ein vollständiges HTML-Dokument,<br /> |
+ | aber auch nur ein Teil davon sein. Der Aufruf des Indexers „q[selector]“ entspricht dem jQuery-Aufruf von „find(selector)“ und gibt<br /> | ||
+ | eine Auflistung der Elemente zurück, die vom angegebenen Selektor ausgewählt werden. Auf jedes Element dieser Ergebnismenge wird schließlich<br /> | ||
+ | die Methode „RemoveAttr()“ angewendet.<br /> | ||
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'''=== | ||
− | Mehr Informationen zu unseren Softwarelösungen und Services finden Sie auf [https://www.max-it.de/techcorner/Bearbeiten_von_HTML_in_C | + | Mehr Informationen zu unseren Softwarelösungen und Services finden Sie auf<br /> |
+ | [https://www.max-it.de/techcorner/Bearbeiten_von_HTML_in_C www.max-it.de/Softwarelösungen] | ||
==='''Links und Quellen'''=== | ==='''Links und Quellen'''=== | ||
− | '''[1]''' https://stackoverflow.com/a/1732454, 30.09.2015<br /> | + | '''[1]''' [https://stackoverflow.com/a/1732454 www.stackoverflow.com/a/1732454], 30.09.2015<br /> |
− | '''[2]''' https://github.com/jamietre/CsQuery, 30.09.2015 | + | '''[2]''' [https://github.com/jamietre/CsQuery www.github.com/jamietre/CsQuery], 30.09.2015 |
=== '''Kontakt''' === | === '''Kontakt''' === | ||
− | Wenn Sie Fragen oder Anmerkungen zu diesem Artikel haben, melden Sie sich bitte bei uns: mailto:techcorner@max-it.de.<br /> | + | Wenn Sie Fragen oder Anmerkungen zu diesem Artikel haben, melden Sie sich bitte bei uns:<br /> |
+ | [http://mailto:techcorner@max-it.de techcorner@max-it.de].<br /> | ||
Über m.a.x. Informationstechnologie AG: <br /> | Über m.a.x. Informationstechnologie AG: <br /> | ||
− | 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 /> | + | Als etabliertes Münchner Systemhaus zeichnen wir uns seit 1989 als verlässlicher IT-Partner mittelständischer und<br /> |
+ | großer Unternehmen aus. Unser Portfolio reicht von IT- Services über individuelle Softwareentwicklung bis hin zur ERP-Beratung.<br /> | ||
+ | <br /> | ||
=== '''Tags''' === | === '''Tags''' === | ||
.Net, C#, jQuery, CsQuery, HTML, XML, DOM manipulation, CSS selectors, CSS2, CSS3, server-side | .Net, C#, jQuery, CsQuery, HTML, XML, DOM manipulation, CSS selectors, CSS2, CSS3, server-side | ||
[[Kategorie: Softwareentwicklung]] | [[Kategorie: Softwareentwicklung]] |
Version vom 22. Januar 2020, 11:25 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
Mehr Informationen zu unseren Softwarelösungen und Services finden Sie auf
www.max-it.de/Softwarelösungen
Links und Quellen
[1] www.stackoverflow.com/a/1732454, 30.09.2015
[2] www.github.com/jamietre/CsQuery, 30.09.2015
Kontakt
Wenn Sie Fragen oder Anmerkungen zu diesem Artikel haben, melden Sie sich bitte bei uns:
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