#これ、Gaucheに取り込ませてもらっていいですか>(び)
#もちろんです。PDなコードとして自由に使ってやって下さい。
#REPLでしかテストしてないので、バグはかなり残ってると思われます。
#htmlをテキストに変換しようとしています。htmlprag( http://www.neilvandyke.org/htmlprag/ )でsxmlに変換したあとで、処理しようとしています。’などのhtmlの特殊文字を普通の文字列に戻す方法を探しています。これはライブラリで可能なのでしょうか?(やはり、手で変換テーブルを作らないとダメでしょうか?) #sxmlになった時点では文字エンティティ参照は解決されていますよね? (つまり "’" という文字列がそのまま出てくるわけではない)。それを、書き出す時に再び文字エンティティ参照に戻す、ということでしょうか?
#技術的な側面を理解できていないようなので、うまく表現できないのですが、やりたいことはhtmlから普通の文字列データを取り出したいわけです。’は"’"に変換したいのです。こういう処理をするライブラリがあるのだろうかと考えたのです。
#htmlpragをつかっているのは、それしか知らないからです。(汗
#あ、なるほど。本来「sxmlというデータ形式」ではその変換は終わっていることになっています。sxml.ssaxでXMLをパーズすればパーズ時に変換されます。htmlpragがそれをやっていないんだと思いますが、sxmlにそのデータが紛れ込んでしまった時点でおかしなデータになっているので、泥縄的に対処するしかないですね。
#たぶんhtmlpragの方に参照を解決するフックがあるんじゃないかと思うので今マニュアルを見ています。
#htmlpragだと、’は(& rsquo)となります。このrsquoを変換したいわけです。sxml.ssaxを試してみます。ありがとうございます。
#ああ、既にそういう形でパーズされてるわけですか。わかりました。それはhtmlpragとsxmlの仕様の狭間におっこっちゃってる感じだなあ。一応sxml形式としては'&'のノードを特別扱いすれば不正なデータとは言えないですが、Gaucheについてくるsxmlのライブラリの中にはそれを解決するコードは無かったと思います。書くのはsxml.toolsの簡単ですが、変換テーブルは自分で作らないとだめですね :-( SXML本家の新しいバージョンを探せば何かあるかもしれませんが…
#なるほど。ありがとうございます。sxml.ssaxを使うとすると、まずhtmlをxmlに変換しないといけないわけですが、この部分をどうするかということになりますか・・・
#あ、sxml.ssaxでもデフォルトでは文字実体参照はXML組み込みのやつしか面倒みてくれなかったので、DTDを食わせるかなにかしないとならなかったような。
#多分、(& entity-name) 形式を自分で変換するコード書いた方が早いと思います。
#なるほど。
#htmlpragでパーズ→ sxml.tree-transのpost-orderで変換 って感じ。ありゃ、sxml.tree-transはマニュアルまだ書いてなかった…
#文字エンティティ参照は読み込み時にも書き出し時にもひっかかった経験があるので、何かライブラリを用意しとくといいかもしれないです。ああそうだ、用意しようかなと前に思って書き始めたんだけど、エンティティ参照にすべき文字とかの規格を探してたら面倒になって中断してたんだっけ。htmlでもバージョンによって違うので面倒くさかった覚えが。