Я пытаюсь проанализировать какой-то XML, полученный из API Google Data Booksearch , и у меня возникают проблемы при попытке нацеливания на конкретный элемент.В настоящее время мой код выглядит так:
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 из этого элемента, и я не совсем уверен, как.Может ли кто-нибудь помочь мне здесь?
Похоже, библиотека Ruby GData уже использует REXML , поэтому я думаю, что вы могли бы добавить что-то подобное в хэш своей книги (заимствуя XPath Марка):
:thumb_href => entry.get_elements('//link[@rel="http://schemas.google.com/books/2008/thumbnail"]')[0].attribute('href').to_s
Я почтизабыл ".to_s", который вам понадобится, если вы хотите рассматривать его как строку.: -)
Используя этот запрос, я смог извлечь href в XML Copy Editor.
//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