次の方法で HTML Tidy を構成することは可能ですか。
与えられたhtml:
lorem ipsum</em> dolar sit amet.</p>
生成させるには
<p><em>lorem ipsum</em> dolar sit amet.</p>
終了タグを取り除く代わりに?
どうもありがとう
マット
私は基本的にスカイサンダースの答えに同意します。を除いて:
単純な整頓されたパーサーが事前の意図を推測することを期待しているでしょう。
意図を推測することなく、説明された機能を提供するパーサーを作成して、決定論的に機能させることができます。簡単に(ええ、多かれ少なかれ簡単に:))その仕事をするアルゴリズムを書くことができます。アイデアは次のようになります。
結局のところ、これはHTML Tidyですでに実行でき、すべてのブラウザー/パーサーはすでに暗黙的に実行しています(ここでは有効なXHTMLについて話していません)。
<div>some <span><em>text</span> here</div>
取得
<div>some <span><em>text</em></span> here</div>
これで、文字列の最後から逆方向に検索して、以下を分析するアルゴリズムを作成できます。
<div>some <span>text</em></span> here</div>
em
タグがタグに埋め込まれていることがわかるため、次のものを生成しますspan
。
<div>some <span><em>text</em></span> here</div>
次に、欠落している終了タグと開始タグの両方を追加するアルゴリズムを作成する必要があります。次に、このhtmlフラグメントを見てみましょう。
<div>some <span>text</em> here</div>
まず、「欠落しているすべての終了タグを追加する」メソッドを適用します。
<div>some <span>text</em> here</span></div>
<span>
アルゴリズムは、ここで、後に続くすべての終了タグと開始タグがに埋め込まれていることを前提としていspan
ます。の前にあった開始タグの終了タグが表示された場合にのみ停止し<span>
ます。この場合、これは</div>
、以前に有効な開始タグがあったです<div>
。次に、前に説明したように、逆検索で同じセマンティクスを適用します。
<div>some <span><em>text</em> here</span></div>
etvoila。
私の意見では:いいえ。技術的には可能ですが、努力する価値はありません。上記の疑似インテリジェントメソッドとともに、独自のパーサーを実装する必要があります。さらに、これはとにかくそこにないhtmlにセマンティクスを適用します。すべてのブラウザー/パーサーは分離された終了タグを無視するだけなので、なぜそれらに注意を払いたいのでしょうか。
まだ納得できない場合は、htmlのセマンティクスを検討してください。
some <b>text</b> here
「print'some'。太字のレンダリングを開始します。print'text'。太字のレンダリングを停止します。print'here'」のようになります。
その間:
some text</b> here
「印刷'テキスト'。太字のレンダリングを停止します。」のように読みます。「なに?大胆なものもレンダリングし始めなかった!?それは無視するよ...」:)
いいえ、HTML Tidy にはそのオプションがありません。
単純な tidy パーサーが以前の意図を推測することを期待するでしょう。
タグをいつ閉じる必要があるかを判断することは、その時点で閉じることを意図しているかどうかに関係なく、html の規則を使用してパーサーによって実行できます。