>>621
ありがと、申し訳ない、そっちの方も今度調べてみる

それはそうと、HXT を試しに使ってみたんだがよく分からない

import Text.XML.HXT.Core

getText :: ArrowXml a => a XmlTree XmlTree
getText = deep isText

procXml = processChildren (getText `when` isElem)

test = do
[r] <- runX (readString [] "適当なXML" >>> procXml >>> writeDocumentToString [])
putStrLn r

これで元のXML内のテキストノードだけを集めたXMLが得られると思ったんだが、
結果は "/" ノード以下に何もノードを持たない空のXMLが出力された

例えば isText を isCmt に変えると、ちゃんとコメントノードをだけ集めてくれる
(その場合、readString に withPreserveComment yes のオプションが必要だが)

isText ってテキストノードかどうかを判定するものなんじゃないの?