トークン化したHTMLドキュメントがあるとすると、それを新しいドキュメントに変換したり、他の変換を適用したりするにはどうすればよいですか?
たとえば、次のHTMLがあるとします。
<html>
<body>
<p><a href="/foo">text</a></p>
<p>Hello <span class="green">world</span></p>
</body>
</html>
私が現在書いているのは、トークンのストリームを出力するトークナイザーです。このドキュメントでは、次のようになります(擬似コードで記述)。
TAG_OPEN[html] TAG_OPEN[body] TAG_OPEN[p] TAG_OPEN[a] TAG_ATTRIBUTE[href]
TAG_ATTRIBUTE_VALUE[/foo] TEXT[text] TAG_CLOSE[a] TAG_CLOSE[p]
TAG_OPEN[p] TEXT[Hello] TAG_OPEN[span] TAG_ATTRIBUTE[class]
TAG_ATTRIBUTE_VALUE[green] TEXT[world] TAG_CLOSE[span] TAG_CLOSE[p]
TAG_CLOSE[body] TAG_CLOSE[html]
しかし、今では、このストリームを使用していくつかの変換を作成する方法がわかりません。
TAG_ATTRIBUTE_VALUE[/foo]
たとえば、別の名前に書き直したいと思いTAG_OPEN[a] TAG_ATTRIBUTE[href]
ます。
私がやりたいもう1つの変換は、たとえば、括弧内TAG_ATTRIBUTE[href]
の後に属性を出力するようにすることです。TAG_OPEN[a]
<a href="/foo">text</a>
に書き直されます
<a href="/foo">text</a>(/foo)
そのような変換を行うための一般的な戦略は何ですか?すべてのタグを削除してTEXTコンテンツを残す、特定のタグの後にタグを追加するなど、他にも多くの変換を実行したいと思います。
解析ツリーを作成する必要がありますか?私はそれを行ったことがなく、トークンのストリームから解析ツリーを作成する方法がわかりません。それとも私はそれを他の方法で行うことができますか?
どんな提案でも大歓迎です。
そしてもう1つ、このすべての構文解析を自分で学びたいので、ライブラリを探していません。
よろしくお願いします、Boda Cydo