ruby で 日記 xml をパースしてみた

ちょーっとだけ ruby してみました。文法なんかは殆んどわからんちんなので、全然違ってるかもしれないけれど、とりあえず動いてよかったよかった。

で、ソースはこんな感じです。

xml ファイル

<?xml version="1.0" encoding="Shift_JIS"?><diary xmlns:html="http://www.w3.org/TR/html4/strict.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/"><section><dc:date>2003-05-06T07:24:41+09:00</dc:date><dc:subject>webdav</dc:subject><comment><html:p>以前にも数回挑戦し、・・・</html:p>・・・省略・・・<news></news></comment></section><section><dc:date>2003-05-06T08:34:40+09:00</dc:date><dc:subject>ブラウザの履歴</dc:subject><comment><html:p>1日毎に整理してメモしたら面白そう。・・・</html:p>・・・省略・・・<news></news></comment></section>・・・省略・・・</diary>

rb ファイル

require "uconv"require "rexml/document"file = File.new ( "../diary2/2003-0506.xml" )doc = REXML::Document.new( file )section_array = REXML::XPath.match( doc, "/diary/section" )for section in section_array  date = REXML::XPath.match( section, "dc:date/child::text()" )  subject = REXML::XPath.match( section, "dc:subject/child::text()" )  comment = REXML::XPath.match( section, "comment/child::node()" )  print Uconv.u8tosjis( date.to_s )  print "¥n"  print Uconv.u8tosjis( subject.to_s )  print "¥n"  print Uconv.u8tosjis( comment.to_s )  print "¥n"  print "¥n---------------------------------------¥n"end

xml から、section 毎に “dc:date”のテキストノード, “dc:subject”のテキストノード, “comment”の全部のノードを取ってきて string にして 表示するだけのソースですが、ここまで出来りゃ読込の部分はいけそう。この後の整形部分とか、ディレクトリから該当ファイルを抽出だとか、そういったことをやれば、なんとかなりそうです。

REXML は、UTF-8で返すっぽいので、Uconv で Shift_JIS に変換して、出力してます。

っとふと思った。”dc:description” のノードを加えて link だけちゃんとすれば、何もかんがえなくても、RSS 吐き出せそう。それ以前にこのサイトの RSS 必要な人がいるかどうか謎だけど。 ま、(WWWC|WWWD) を使ってくださるお方もいるようなので、そのうち時間が出来たらやろう・・・。

メモメモ