2011-11-19 45 views
1

我試圖解析從Google Data Booksearch API得到的一些XML,並且在嘗試定位特定元素時遇到問題。目前我的代碼如下所示:在Ruby中解析Google Data Booksearch API XML的問題

require 'gdata' 

client = GData::Client::BookSearch.new 
feed = client.get("http://books.google.com/books/feeds/volumes?q=Foundation").to_xml 

books = [] 

feed.elements.each('entry') do |entry| 
    book = { 
    :title => entry.elements['title'].text, 
    :author => entry.elements['dc:creator'].text, 
    :book_id => entry.elements['dc:identifier'].text 
    } 

    books.push(book) 
end 

p books 

並且所有工作都正常,但我想向書籍散列添加縮略圖URL。與每本書的縮略圖URL的標記看起來像這樣:

<feed> 
    <entry> 
    ... 
    <link rel="http://schemas.google.com/books/2008/thumbnail" type="image/x-unknown" href="http://bks6.books.google.com/books?id=ID5P7xbmcO8C&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_gdata"/> 
    ... 
    </entry> 
</feed> 

我想抓住從這個元素href屬性的內容,我不完全知道如何。有人可以幫我從這裏出去嗎?

回答

1

它看起來像紅寶石的GData庫已經使用REXML,所以我覺得你可以添加這樣的事情你的書哈希(借用馬克的XPath的):

:thumb_href => entry.get_elements('//link[@rel="http://schemas.google.com/books/2008/thumbnail"]')[0].attribute('href').to_s 

我差點忘了「.to_s」,如果你想把它當作一個字符串,你將需要它。 :-)

+0

嗯,無論什麼原因,這是行不通的,當我嘗試運行它時,出現錯誤。 '/Users/rpowell93/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/rexml/element.rb:538:in'xpath':錯誤的參數個數(1代表0 )(ArgumentError)' – rpowell

+0

我最近對上述答案的編輯應該可行,因爲我這次實際上已經在IRB中對它進行了測試。 :-) – L2G

1

使用此查詢,我能提取HREF在XML文字編輯

//link[@rel="http://schemas.google.com/books/2008/thumbnail"]/@href 

您將需要與引入nokogiri打開該文檔,然後運行該文件中的XPath,是這樣的:

doc = Nokogiri::HTML(open('http://books.google.com/books/feeds/volumes?q=Foundation')) 
doc.xpath('//link[@rel="http://schemas.google.com/books/2008/thumbnail"]/@href').each do |link| 
    puts link.content 
end 
+0

這樣做,我會移植此代碼使用Nokogiri。 – rpowell