2017.11.24
2020.1.7

空要素<img />や<br />のタグの終端がデフォルトでは出力されない対応(Html Agility Pack)

Html Agility Packで読み込んだHTMLの内容を修正後に保存すると、読み込む前のHTMLにはあったはずの空要素<img />や<br />タグの終端「/」が出力されずに保存されてしまっていたので、タグの終端まで含めて出力する方法です。

目次

  • HTMLファイル
  • コード(タグ終端なし)
  • コード(タグ終端有り)
  • 備考
  • 参考リンク

HTMLファイル

読み込むHTMLは以下の通りです。(c:\temp\test.html)


<div>
    <br>
</div>

コード(タグ終端なし)

デフォルトではタグの終端は出力されません。


var doc = new HtmlDocument();
doc.Load(@"c:\temp\test.html");
Console.WriteLine(doc.DocumentNode.OuterHtml);

出力結果


<div>
    <br>
</div>

コード(タグ終端有り)

空要素のタグを終端有りで出力するには、「OptionWriteEmptyNodes」に「true」を設定します。


var doc = new HtmlDocument();
doc.Load(@"c:\temp\test.html");
doc.OptionWriteEmptyNodes = true;
Console.WriteLine(doc.DocumentNode.OuterHtml);

出力結果


<div>
    <br />
</div>

備考

タグの終端を記述する書き方はXHTMLからの名残らしいですが、HTML5でも正しい文法として解釈されます。ただ、とくに理由がないなら、終端はなくてもいいと思います。

参考リンク

C#】関連記事