Parse HTML | Find Closing Tag | Attributes |

HTML文書をパースする



HTML文書の構造は、以下のようにタグとテキストが連なったものである。

test<tag>text<tag><tag>text<tag>text<tag>


※ この時点では、<opening-tag>と</closing-tag>の区別はつけていない。

この文書をパースするための第一ステップは、最初のタグを見つけることである。
一見すると、最初の < の文字を見つければいいような気がする。

しかし以下の例では、最初の < はテキストとして認識され、
その後の <div>TEST</div>は、タグ+テキスト+タグとして認識される。

   <     <div>TEST</div>


では次のケースはどうだろうか?

   <a     <div>TEST</div>


この場合、<a <div> が一つのタグとして認識される。
(タグのまん中に < が混入しているが、Chromeはこのようにタグを認識するのである。)

では、< の後に、なにか文字があれば、タグとして認識されるのだろうか?

事はそう単純ではない。次の例を見てみよう。

   <1     <div>TEST</div>


この場合、<1 はテキストとして認識され、残りの
<div>TEST</div>は、タグ+テキスト+タグとして認識される。

つまり、< の文字がタグの最初の文字となるかどうかは、< の次の文字で決まるようだ。

そこで、< の後にcharcodeが0から127までの文字をつけて試してみた。

check-0-to-127.php

check-unicode.php

【結論】
<a から <z と <A から <Z で始まる場合は、ELEMENT_NODE になる。
<!, </, <? で始まる場合は、COMMENT_NODE になる。
それ以外の文字が < に続いた場合は、TEXT_NODE になる。