Ich benutze das HTML-Agility-Paket, um Eingaben in einem WYSIWYG zu bereinigen. Dies ist vielleicht nicht der beste Weg, dies zu tun, aber ich arbeite mit Entwicklern, die bei Kontakt mit Regex explodieren, so dass es ausreichen muss.
Mein WYSIWYG-Inhalt sieht in etwa so aus:
<p></p>
<p></p>
<p><span><input id="textbox" type="text" /></span></p>
Ich muss die leeren Absatztags entfernen. Hier ist, wie ich es gerade mache:
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
return;
foreach (HtmlNode node in nodes)
{
node.InnerHtml = node.InnerHtml.Trim();
if (node.InnerHtml == string.Empty)
node.ParentNode.RemoveChild(node);
}
Da es sich bei dem HTML- RemoveChild
jedoch nicht um ein vollständiges Dokument handelt, weisen die RemoveChild
keinen übergeordneten Knoten auf und RemoveChild
wird daher fehlschlagen, da ParentNode
null hat.
Ich kann keinen anderen Weg finden, um Tags zu entfernen, kann mir jemand auf eine alternative Methode hinweisen?
Technisch gesehen handelt es sich bei Elementen der ersten Ebene um untergeordnete Elemente des Dokumentstamms. Daher sollte der folgende Code funktionieren:
if (node.InnerHtml == String.Empty) {
HtmlNode parent = node.ParentNode;
if (parent == null) {
parent = doc.DocumentNode;
}
parent.RemoveChild(node);
}
Sie möchten aus der Sammlung entfernen, oder?
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
return;
for (int i = 0; i < nodes.Count - 1; i++)
{
nodes[i].InnerHtml = nodes[i].InnerHtml.Trim();
if (nodes[i].InnerHtml == string.Empty)
nodes.Remove(i);
}