Bearbeiten von HTML in C

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