2013-12-13 2 views
0

Я пытаюсь разобрать RSS-канал от Digital Trends. Я не могу получить атрибуты. Например, мне нужно получить URL-адрес изображения внутри тега <enclosure>.Как проанализировать XML-документ с помощью Nokogiri?

Файл XML является:

<item> 
    <title> 
    Xbox One returns to Best Buy with five new holiday bundles 
    </title> 
    <link> 
    http://www.digitaltrends.com/gaming/xbox-one-returns-best-buy-five-new-holiday- bundles/ 
    </link> 
    <pubDate>Thu, 12 Dec 2013 23:59:20 +0000</pubDate> 
    <enclosure url="http://icdn7.digitaltrends.com/image/microsoft-xbox-one-review-system-v2-100x100-c.jpg" length="0" type="image/png"/> 
</item> 

Как я могу это сделать?

+2

Что вы пробовали? Или вы ожидаете, что мы напишем вам это? [Учебники Nokogiri] (http://nokogiri.org) рассказывают об этом достаточно подробно, чтобы сделать это легкой работой. «Вопросы, требующие кода, должны продемонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не сработали и ожидаемые результаты. См. Также: [Контрольный список вопросов переполнения стека] (http: //meta.stackexchange. com/questions/156810/stack-overflow-question-checklist) « –

+0

Это RSS. Не разбирайте его вручную. Используйте синтаксический анализатор RSS. –

+0

Это в основном дубликат http://stackoverflow.com/questions/8584361/how-do-i-parse-xml-using-nokogiri-and-split-a-node-value/8584606#8584606 –

ответ

0

Попробуйте @doc.xpath("//enclosure")[0].attr("url"), если у вас есть документ, загруженный в @doc.

0

Попробуйте этот код:

require 'nokogiri' 

doc = Nokogiri::HTML IO.read('file.xml') 
e = doc.css('enclosure') 
puts e.attr('url') 
1
xml = Nokogiri::XML(...) 
item = xml.xpath('//item') 
item.at('enclosure')['url'] 

или

xml = Nokogiri::XML(...) 
item = xml.xpath('//item') 
item.at('enclosure').attr('url') 

Первый пример возвращает строку, второй пример возвращает Nokogiri::XML::Attr экземпляр, представляющий значение строки.

Конечно, заменить

Nokogiri::XML(...) 

с соответствующим документом разбором, в соответствии с источником вашего документа XML.

Возможно, вы захотите прочитать статью Searching an HTML/XML Document. Более подробная информация содержится в документации по API Nokogiri::XML::Node.

+0

Будьте осторожны с 'item.at ('enclosure'). first'. 'at' возвращает один узел, а не узел NodeSet, а узел не имеет метода' first'. 'item.search ('enclosure'). first' будет работать. –

+0

Моя ошибка, я изначально использовал 'css', чем изменил его на' at'. Я исправил код, спасибо. –

Смежные вопросы