HtmlAgilityPackは、OuterHtmlの欠落する終了タグを生成します。

c# html html-agility-pack

質問

私はHtmlAgilityPackを使ってhtmlテキストを解析して操作しています。しかし、DocumentNode.OuterHtmlが欠落している終了タグを与えるようです。

問題を分離するために、私はただ解析してOuterHtml(操作なし)を取得するだけです。

var document = new HtmlDocument();
document.LoadHtml(myHtml);
result = document.DocumentNode.OuterHtml;

オリジナル:(myHtml)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><title>
     MyTitle
</title>

OutputHtml:(結果) meta要素が閉じられていないことに注意してください

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge"><title>
    MyTitle
</title>

同様に、すべてのinput要素とimg要素は開いたままになっています。 (それは問題ではないはずですが、そうではないはずですが)Chromeはページを正しくレンダリングできません。読み続けます。

もっと奇妙なことは何ですか?

オリジナル:(myHtml)

    <option value="10">Afrikaans</option>
    <option value="11">Albanian</option>
    <option value="12">Arabic</option>
    <option value="13">Armenian</option>
    <option value="14">Azerbaijani</option>
    <option value="15">Basque</option>

OutputHtml:(結果) 完全な明示的な終了タグがないことに注目してください

    <option value="10">Afrikaans
    <option value="11">Albanian
    <option value="12">Arabic
    <option value="13">Armenian

HtmlAgilitPack最新のNuGetパッケージを使用する:id = "HtmlAgilityPack" version = "1.4.9"

受け入れられた回答

ドキュメントをロードするときに設定できるオプションがいくつかあります。

OptionAutoCloseOnEnd

クローズされていないノードのクローズを、最後か文書内で直接行う必要があるかどうかを定義します。これをtrueに設定すると、ブラウザがページをどのようにレンダリングするかを実際に変更することができます。

document = new HtmlDocument();
document.OptionAutoCloseOnEnd = true;
document.LoadHtml(content);

関連する情報源:

HtmlAgilityPackはオプションの終了タグを削除します

HTMLAgilityPackで画像タグが閉じない




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