マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

XPath

RubyXPath使おうと思い以下のコードを書いていたら空の配列が返ってきた。何でだ?と思い、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が返ってくる模様