Emacs から Togetter 見れる togetter-el 書いた。 - Thanks Driven Life
これを見ていて、そういや Emacs 24から libXMLの対応が入ったとか
書いていたから XPathは使えるんじゃないかなって調べてみました。
結論から言うと使えないです。
そもそも使える関数が
- libxml-parse-xml-region
- libxml-parse-html-region
しかありません。
うーんって思ったんですが、結果の S式を見ていると別にいいかなとも
思えてきました。S式を使わない言語での XML処理って XPathや CSS
selectorを使っても、専用の Class/メソッド使って解析って感じに
なるかと思うんですが、S式で結果が返ってくるのであれば普段使っている
関数(car, cdr系, filter系)を使って十分解析できるんじゃないかな
と思いました。見やすさの問題は多少あるかと思いますけど、わりと
コンパクトに書けるんじゃないかなという気はします。
サンプルコード(RSSの解析)
(require 'cl) (require 'xml) (defvar rss-url "http://www.dmm.co.jp/mono/dvd/-/list/=/article=actress/id=15365/rss=create/") (defun asami-yuma:new-release () (with-temp-buffer (let ((cmd (format "curl -s %s" rss-url))) (call-process-shell-command cmd nil t) (asami-yuma:collect-titles (libxml-parse-xml-region (point-min) (point-max)))))) (defun asami-yuma:collect-titles (xml-sexp) (loop for elm in (cdr xml-sexp) when (eq (car elm) 'item) do (princ (concat (cadr (assoc-default 'title (cdr elm))) "\n")))) (asami-yuma:new-release)
実行結果
% emacs -Q --script amiyuma_rss.el デビュー6周年特別記念盤 麻美ゆま200セックス20時間5枚組 極嬢ルームサービス 超VIP限定 秘密の交際クラブ 麻美ゆま オンリー騎乗位 麻美ゆま お漏らしが止まらない!気持ちよすぎる失禁・羞恥お漏らし200人16時間 バコバコ風俗 NO.1指名 4時間スペシャル 麻美ゆま 【アウトレットBD】犯された女教師 〜逃れられない凌辱 麻美ゆま (ブルーレイディスク) 早漏彼氏 麻美ゆま 【アウトレット】ギリモザ 美しい痴女の接吻と性交 麻美ゆま 夫の目の前で犯されて- 貞操泥棒 麻美ゆま ....