Ruby 資料一覧

XMLパース

2007/10/16更新

対応バージョン: 1.8.6

RubyでXMLデータをパースするにはいくつかの方法があるが、ここではRuby 1.8に標準添付されているREXMLライブラリを使用してRSS2.0のファイルをパースする(RSSライブラリは使用しない)。

尚、RSS/Atomのバージョン毎の差異吸収やエラー処理等は省いている。

パース対象RSS (2.0)

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0">
  <channel>
    <title>sample blog</title>
    <link>http://foo.bar.com/</link>
    <description>サンプルブログ</description>
    <language>ja</language>

    <item>
      <title>使い方難しい。</title>
      <link>http://foo.bar.com/article/2</link>
      <pubDate>Thu, 17 Oct 2007 17:13:00 +0900</pubDate>
    </item>

    <item>
      <title>ブログ始めました。</title>
      <link>http://foo.bar.com/article/1</link>
      <pubDate>Wed, 13 Oct 2007 12:08:00 +0900</pubDate>
    </item>

  </channel>
</rss>

ソース

require "rexml/document"
include REXML

require "time"

doc = Document.new File.new("rss20.xml")

puts "<ul>"

doc.elements.each("rss/channel/item") {|item|
  title = item.elements["title"].text
  link  = item.elements["link"].text
  pubDate = item.elements["pubDate"].text
  date  = Time.rfc2822(pubDate).strftime("%m/%d")

  puts "  <li><a href=\"#{link}\">#{title}</a> (#{date})</li>"
}

puts "</ul>"

実行結果

<ul>
  <li><a href="http://foo.bar.com/article/2">使い方難しい。</a> (10/17)</li>
  <li><a href="http://foo.bar.com/article/1">ブログ始めました。</a> (10/13)</li>
</ul>

実行環境

Fedora 7 (2.6.22.9-91.fc7)