HTML Agile Packは入力から自己クローズタグを取り除きます

.net asp.net c# html-agility-pack

質問

これが私のチェックボックスを作成する方法です:

HtmlInputCheckBox checkbox = new HtmlInputCheckBox();
checkbox.ID = _Data.ControlID;
checkbox.Attributes.Add("class", "checkbox");
checkbox.Attributes.Add("autocomplete", "off");
sReplacementString = element.RenderToString();

RenderToStringはこれを行う拡張です:

public static string RenderToString(this Control control)
{
    StringBuilder sb = new StringBuilder();
    using (StringWriter writer = new StringWriter(sb))
    {
        using (HtmlTextWriter htmlWriter = new HtmlTextWriter(writer))
        {
            control.RenderControl(htmlWriter);
        }
    }
    return sb.ToString();
}

これは、入力上に閉じタグを持つ文字列を生成します。私はこれをデバッグ時に見ることができます。

<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox" />

その後、Agility Packを使用してHTMLに追加されます。

HtmlNode temp = doc.CreateElement("temp");
temp.InnerHtml = sReplacementString;
HtmlNode current = inputNode;

foreach (HtmlNode child in temp.ChildNodes)
{
    inputNode.ParentNode.InsertAfter(child, current);
    current = child;
}
inputNode.ParentNode.RemoveChild(inputNode);

ただし、HTMLでは、チェックボックスの入力タグに自己クローズ・スラッシュがないため、WC3検証に失敗します。

<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox">

これは、同じ方法で生成されたテキストボックスで発生します。アジリティーパックを使用してHTMLをページに追加すると、彼らは失われているように見えます。

これをどうやって防ぐのですか?

受け入れられた回答

結局のところ、正規表現を使ってHTMLを処理してしまって、自己クローズタグが追加されてしまったと私は思う。私は、これがハッキーであり、将来の証明ではないので、より良い解決策を望んでいます - それは修正が必要なすべてのタグのために追加されなければなりません:

sXHTML = Regex.Replace(sXHTML, "<input(.*?)>", "<input $1 />");

人気のある回答

"OptionWriteEmptyNodes"フラグを設定してみてください:

HtmlDocument doc = new HtmlDocument();
doc.OptionWriteEmptyNodes = true;

// ....

更新

私の元の答えは拒否されていたので、別の解決方法があります。

レンダリングする前に正しいDOCTYPEをHTMLドキュメントに渡していますか? DOCTYPEを挿入する方法については、このSOの質問を見てくださいHTMLにDoctypeを追加するAgility pack



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ