RubyでXPath使おうと思い以下のコードを書いていたら空の配列が返ってきた。何でだ?と思い、title/text()をtitleに変えたらしっかりtitleのElementの配列が返ってくる。
require 'net/http' require 'rexml/document' body = Net::HTTP.get('d.hatena.ne.jp', '/d-kami/rss'); doc = REXML::Document.new(body) doc.get_elements('/rdf:RDF/item').each{|node| p node.get_elements('title/text()') }
それで、次に以下のようにやってみたら、うまくブログのエントリのタイトルの一覧を表示できた…がしかしこれでいいのだろうかという疑問が…
require 'net/http' require 'rexml/document' body = Net::HTTP.get('d.hatena.ne.jp', '/d-kami/rss'); doc = REXML::Document.new(body) doc.get_elements('/rdf:RDF/item').each{|node| p node.get_elements('title')[0].text }
最後に、以下のようにやったら、これでもうまくいった。get_elementsはElementの配列を返すようなXPathを渡さないといけないのかな?それでelementsは単一のElementを指定する場合に使えるらしい。まだまだ始めたばかりなので、わからないことが多い
require 'net/http' require 'rexml/document' body = Net::HTTP.get('d.hatena.ne.jp', '/d-kami/rss'); doc = REXML::Document.new(body) doc.get_elements('/rdf:RDF/item').each{|node| p node.elements['title/text()'] }
2009 7/25 追記 node.elements['title/text()']だと返ってくるのはStringではない。node.elements['title'].text()を使うとStringが返ってくる模様