3

HTMLアジリティパックを使用して、WYSIWYGへの入力をクリーンアップしています。これはこれを行うための最良の方法ではないかもしれませんが、私は正規表現との接触で爆発する開発者と協力しているので、それで十分です。

私のWYSIWYGコンテンツは次のようになります(たとえば):

<p></p>
<p></p>
<p><span><input id="textbox" type="text" /></span></p>

空の段落タグを削除する必要があります。これが私が今それをしている方法です:

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);
}

ただし、HTMLは完全なドキュメントではないため、段落タグには親ノードがなく、 nullであるRemoveChildため失敗します。ParentNode

タグを削除する別の方法が見つかりませんが、誰かが別の方法を教えてもらえますか?

4

2 に答える 2

4

技術的には、第 1 レベルの要素はドキュメント ルートの子であるため、次のコードが機能するはずです。

if (node.InnerHtml == String.Empty) {
    HtmlNode parent = node.ParentNode;
    if (parent == null) {
        parent = doc.DocumentNode;
    }
    parent.RemoveChild(node);
}
于 2012-04-17T12:55:02.407 に答える
0

コレクションから削除したいですよね?

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);
}
于 2012-04-17T12:59:47.977 に答える