innerText を使うと見た目に合わせて文字列が受け取れます
例えばこういう HTML があるとき
foo
bar<br/>baz
<div>div</div>
<p>p</p>
text
受け取る文字列はこうなります
foo bar
baz
div
p
text
HTML 中の改行はスペースになるので スペースに変換されています
br タグは改行に変換されています
また div タグでも改行され p タグでは前後に空行が追加されます
この変換を大きめのファイルにまとめて行いたいです
Node.js でやろうかと思って jsdom を使ってみたのですが innerText はサポートされていませんでした
レンダリングエンジンありきみたいな機能なので実装されてないそうです
issue で要望は出てましたが 未だに実装されていないのであまり期待はできません
happy-dom ならどうかなと試してみたらこっちはサポートされていました
しかし 思ったような出力になりません
foo
barbaz
div
ptext
br タグは単純に無視され 改行がそのまま反映されています
また div は前後で改行されていますが p は改行されず直後の改行も無視されて text とくっついてしまっています
しかたなくブラウザを使うことにしました
ただブラウザを使っても期待する結果を得るにはドキュメントと接続されて画面に表示されている必要があるようでした
document.createElement を使って div を作った直後に innerHTML を設定して innerText を取り出してもこうなります
foo
barbaz
div
p
text
HTML の改行がそのまま反映されて br タグは無視されています
happy-dom と同じ感じです
p タグのあとに改行ができるところだけ違っています
ブラウザでも一旦表示させないといけないのが面倒ですね
速度にも影響出そうですし
一応簡単に調べてみたところ 8 ~ 10 倍くらいの時間がかかるようになってました
適当なページから持ってきた HTML で文字数は 6500 くらいでタグ数は 150 くらいのもので確認しました