2

トークン化した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

4

2 に答える 2

0

html が xml に準拠していると仮定できる場合は、xslt が適しています。しかし、あなたは独自のパーサーを書きたがっているように見えるので、それはうまくいかないと思います(理由はわかりません)。あなたが本当にパーサーを書きたいのなら (あなた自身のパーサー エンジンではなく、解析ルールを書きたいと思います)、antlr と MS oslo を見てください。

于 2010-02-21T20:47:18.127 に答える
0

XML/HTML ツリーを解析/トラバースするには、さまざまな方法があります。おそらく私はあなたを指すことができます:-

http://razorsharpcode.blogspot.com/2009/10/combined-pre-order-and-post-order-non.html

DOM 要素の事前注文または事後操作を行いたい場合は、そこで説明されているアルゴリズムを使用できます。

于 2010-02-21T20:50:46.167 に答える