2011-12-21 6 views
1

Я использую Nokogiri для анализа XML.Как разобрать XML с помощью Nokogiri и разделить значение узла?

doc = Nokogiri::XML("http://www.enhancetv.com.au/tvguide/rss/melbournerss.php") 

Я не был уверен, как правильно получить значения узлов правильно.

Я после title, link и description узлов, в частности, которые сидят под item родительских узлов.

<item> 
    <title>Toasted TV - TEN - 07:00:00 - 21/12/2011</title> 
    <link>http://www.enhancetv.com.au/tvguide/</link> 
    <description>Join the team for the latest in gaming, sport, gadgets, pop culture, movies, music and other seriously fun stuff! Featuring a variety of your favourite cartoons.</description> 
</item> 

То, что я хотел бы сделать это таким образом, что я могу преобразовать даты и времени строки в допустимый DateTime объект, чтобы использовать позже вниз по дорожке title.split("-").

ответ

3

Поскольку это RSS канал, вы можете рассмотреть RSS парсер:

require 'simple-rss' 
require 'open-uri' 

feed = 'http://www.enhancetv.com.au/tvguide/rss/melbournerss.php' 
rss = SimpleRSS.parse open(feed) 

rss.items.each do |item| 
    puts item.title, item.link, item.description 
end 
1
def parse_time(text) 
    items = text.split("-") 
    DateTime.strptime("#{items[-2].strip}#{items[-1].strip}", "%H:%M:%S%d/%m/%Y") 
end 

content = Net::HTTP.get(URI.parse("http://www.enhancetv.com.au/tvguide/rss/melbournerss.php")) 
doc = Nokogiri::XML(content){|config| config.noblanks } 

doc.search("//item").map{ |node| 
    node.children.inject({}) do |hash, node| 
    if node.name == "title" 
     #or another name 
     hash["created_at"] = parse_time(node.text) 
    end 

    hash[node.name] = node.text 
    hash 
    end 
} 
+0

Мм, как бы я также получить описание, ссылку, и т.д.? – fuzz

+0

Этот код показывает только, как извлечь узел '', но мне действительно нужны остальные узлы. В идеале я хотел бы сохранить все значения в объекте, который будет использоваться позже. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/264802/">fuzz</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">2<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Для примера заголовка строки вы упомянули:</p> <pre><code class="prettyprint-override">DateTime.parse(s.split(" - ")[-2..-1].join(" ")) </code></pre> <p>Это получает вас DateTime объект: <code class="prettyprint-override">Wed, 21 Dec 2011 07:00:00 +0000</code></p> <p>Но вы должны следить за изменениями названия, вам может понадобиться иметь дело с. Измените бит бит, чтобы удовлетворить ваши потребности.</p> <p>Обновление: не заметили, что вам также нужна дополнительная информация о том, как разбирать документ. Итак, вот как:</p> <pre><code class="prettyprint-override">doc = Nokogiri::XML(open("http://www.enhancetv.com.au/tvguide/rss/melbournerss.php")) data = doc.xpath("//item").map do |item| [ item.search("title").first.content, item.search("link").first.content, item.search("description").first.content ] end </code></pre> <p>Это загрузит все заголовок, ссылку и описание элементов в массиве данных. Nokogiri :: XML принимает строку как содержимое документа xml, поэтому вам нужно открыть URL-адрес, а затем подать на него результат.</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/8584456">источник</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2011-12-21 02:34:42</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+1</span></div> <div class="col-lg-11"> <p class="commenttext">Используйте 'item.at (« title »). Content' вместо' item.search («title»). First.content'. 'at' означает« получить первый экземпляр » – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">Смежные вопросы</div> <ul class="relative_list"> <li> 1. <a href="http://ru.voidcc.com/question/p-bmpejxuh-bok.html" target="_blank" title="Как разобрать файл XML с помощью Nokogiri"> Как разобрать файл XML с помощью Nokogiri </a> </li> <li> 2. <a href="http://ru.voidcc.com/question/p-bhompewr-kc.html" target="_blank" title="Как разобрать файл XML с помощью Nokogiri и рубин"> Как разобрать файл XML с помощью Nokogiri и рубин </a> </li> <li> 3. <a href="http://ru.voidcc.com/question/p-tpyjrvsr-bcz.html" target="_blank" title="Проблема получения XML значение атрибута узла с nokogiri"> Проблема получения XML значение атрибута узла с nokogiri </a> </li> <li> 4. <a href="http://ru.voidcc.com/question/p-njyotrbg-pt.html" target="_blank" title="Nokogiri разобрать XML с xpath"> Nokogiri разобрать XML с xpath </a> </li> <li> 5. <a href="http://ru.voidcc.com/question/p-nepvikeu-bcn.html" target="_blank" title="Как разобрать странный XML-файл с помощью Nokogiri?"> Как разобрать странный XML-файл с помощью Nokogiri? </a> </li> <li> 6. <a href="http://ru.voidcc.com/question/p-gpyyuuws-boe.html" target="_blank" title="Как разобрать XML-элемент Nokogiri?"> Как разобрать XML-элемент Nokogiri? </a> </li> <li> 7. <a href="http://ru.voidcc.com/question/p-kbxjyrsf-wo.html" target="_blank" title="Как разобрать XML с помощью селекторов Nokogiri css, используя циклы?"> Как разобрать XML с помощью селекторов Nokogiri css, используя циклы? </a> </li> <li> 8. <a href="http://ru.voidcc.com/question/p-dffmkcba-ra.html" target="_blank" title="Добавление узла с помощью Nokogiri"> Добавление узла с помощью Nokogiri </a> </li> <li> 9. <a href="http://ru.voidcc.com/question/p-ajcnrylb-tr.html" target="_blank" title="Использование Nokogiri Как изменить текстовое значение узла с помощью Nokogiri :: XML :: Text неверное число аргументов"> Использование Nokogiri Как изменить текстовое значение узла с помощью Nokogiri :: XML :: Text неверное число аргументов </a> </li> <li> 10. <a href="http://ru.voidcc.com/question/p-sxkdtrtt-wq.html" target="_blank" title="Как изменить содержимое узла с помощью Nokogiri?"> Как изменить содержимое узла с помощью Nokogiri? </a> </li> <li> 11. <a href="http://ru.voidcc.com/question/p-psgztkwi-rb.html" target="_blank" title="Как заменить содержимое узла XML с помощью Nokogiri"> Как заменить содержимое узла XML с помощью Nokogiri </a> </li> <li> 12. <a href="http://ru.voidcc.com/question/p-pduwrdyc-ca.html" target="_blank" title="Как просмотреть содержимое узла с помощью nokogiri?"> Как просмотреть содержимое узла с помощью nokogiri? </a> </li> <li> 13. <a href="http://ru.voidcc.com/question/p-pusnanrr-xy.html" target="_blank" title="Как правильно разобрать и просмотреть с помощью nokogiri?"> Как правильно разобрать и просмотреть с помощью nokogiri? </a> </li> <li> 14. <a href="http://ru.voidcc.com/question/p-djbyhhan-zr.html" target="_blank" title="Как разобрать конкретную таблицу с помощью Nokogiri?"> Как разобрать конкретную таблицу с помощью Nokogiri? </a> </li> <li> 15. <a href="http://ru.voidcc.com/question/p-shjfpsrh-bha.html" target="_blank" title="Как разобрать таблицу HTML с помощью Nokogiri?"> Как разобрать таблицу HTML с помощью Nokogiri? </a> </li> <li> 16. <a href="http://ru.voidcc.com/question/p-sfvlpaid-me.html" target="_blank" title="Как получить значение атрибута с помощью Nokogiri"> Как получить значение атрибута с помощью Nokogiri </a> </li> <li> 17. <a href="http://ru.voidcc.com/question/p-efygjemf-eq.html" target="_blank" title="Как разобрать текст TABLE с помощью Nokogiri?"> Как разобрать текст TABLE с помощью Nokogiri? </a> </li> <li> 18. <a href="http://ru.voidcc.com/question/p-fyviwsda-hr.html" target="_blank" title="Как разобрать таблицу HTML с помощью Nokogiri?"> Как разобрать таблицу HTML с помощью Nokogiri? </a> </li> <li> 19. <a href="http://ru.voidcc.com/question/p-xirezmzv-dy.html" target="_blank" title="Как разобрать страницу с помощью Nokogiri?"> Как разобрать страницу с помощью Nokogiri? </a> </li> <li> 20. <a href="http://ru.voidcc.com/question/p-klrflslv-bqr.html" target="_blank" title="Как проанализировать XML-документ с помощью Nokogiri?"> Как проанализировать XML-документ с помощью Nokogiri? </a> </li> <li> 21. <a href="http://ru.voidcc.com/question/p-bjjmfcty-bdm.html" target="_blank" title="Получение братьев и сестер узла с помощью Nokogiri"> Получение братьев и сестер узла с помощью Nokogiri </a> </li> <li> 22. <a href="http://ru.voidcc.com/question/p-mqbbqwjf-kz.html" target="_blank" title="Как разобрать и очистить метатеги URL-адреса с помощью Nokogiri?"> Как разобрать и очистить метатеги URL-адреса с помощью Nokogiri? </a> </li> <li> 23. <a href="http://ru.voidcc.com/question/p-bbfmncyu-bkz.html" target="_blank" title="Как я могу заставить Nokogiri разобрать и вернуть XML-документ?"> Как я могу заставить Nokogiri разобрать и вернуть XML-документ? </a> </li> <li> 24. <a href="http://ru.voidcc.com/question/p-snfzovfl-gz.html" target="_blank" title="Выбор узла с помощью Nokogiri, а затем следующего указанного узла"> Выбор узла с помощью Nokogiri, а затем следующего указанного узла </a> </li> <li> 25. <a href="http://ru.voidcc.com/question/p-xvnrezmg-bmh.html" target="_blank" title="Сканирование каждого узла HTML с помощью nokogiri"> Сканирование каждого узла HTML с помощью nokogiri </a> </li> <li> 26. <a href="http://ru.voidcc.com/question/p-vbmpqpmm-beb.html" target="_blank" title="Как получить значение элемента XML с помощью анализатора Nokogiri SAX?"> Как получить значение элемента XML с помощью анализатора Nokogiri SAX? </a> </li> <li> 27. <a href="http://ru.voidcc.com/question/p-ocwqepti-bmp.html" target="_blank" title="получить значение узла XML с помощью C#"> получить значение узла XML с помощью C# </a> </li> <li> 28. <a href="http://ru.voidcc.com/question/p-tqukikcd-zt.html" target="_blank" title="Xml форматирование с помощью узла"> Xml форматирование с помощью узла </a> </li> <li> 29. <a href="http://ru.voidcc.com/question/p-zazrvoao-bsa.html" target="_blank" title="Как разобрать SOAP xml, чтобы получить значение определенного узла"> Как разобрать SOAP xml, чтобы получить значение определенного узла </a> </li> <li> 30. <a href="http://ru.voidcc.com/question/p-gvtrjinj-bqq.html" target="_blank" title="Прочитать значение узла XML с помощью фрагментов"> Прочитать значение узла XML с помощью фрагментов </a> </li> </ul> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515422009"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Последний вопрос </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://ru.voidcc.com/question/p-bafffhbz-yb.html" target="_blank" title="Отдельный экземпляр cronjob в Amazon ElasticBeanstalk"> Отдельный экземпляр cronjob в Amazon ElasticBeanstalk </a> </li> <li class="side_article_list_item"> 2. <a href="http://ru.voidcc.com/question/p-rngqxdmt-bam.html" target="_blank" title="Regex: подсчет различий между двумя строками"> Regex: подсчет различий между двумя строками </a> </li> <li class="side_article_list_item"> 3. <a href="http://ru.voidcc.com/question/p-cfpytcnr-zt.html" target="_blank" title="FTP-загрузка файлов с несколькими файлами PHP"> FTP-загрузка файлов с несколькими файлами PHP </a> </li> <li class="side_article_list_item"> 4. <a href="http://ru.voidcc.com/question/p-nxjkgiuu-zm.html" target="_blank" title="В Python, почему установка пакета SciPy после удаления не работает?"> В Python, почему установка пакета SciPy после удаления не работает? </a> </li> <li class="side_article_list_item"> 5. <a href="http://ru.voidcc.com/question/p-socimvfb-zb.html" target="_blank" title="NodeMCU, Lua http.get() «Отключено с ошибкой 8» - что такое ошибка 8?"> NodeMCU, Lua http.get() «Отключено с ошибкой 8» - что такое ошибка 8? </a> </li> <li class="side_article_list_item"> 6. <a href="http://ru.voidcc.com/question/p-wzkrkyog-yu.html" target="_blank" title="Как найти элементы в таблице с Python и Selenium?"> Как найти элементы в таблице с Python и Selenium? </a> </li> <li class="side_article_list_item"> 7. <a href="http://ru.voidcc.com/question/p-bdmtjenj-vn.html" target="_blank" title="Как скомпонировать элементы журнала с верхним регистром в массиве"> Как скомпонировать элементы журнала с верхним регистром в массиве </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Смежные вопросы</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://ru.voidcc.com/question/p-bmpejxuh-bok.html" target="_blank" title="Как разобрать файл XML с помощью Nokogiri"> Как разобрать файл XML с помощью Nokogiri </a> </li> <li class="side_article_list_item"> 2. <a href="http://ru.voidcc.com/question/p-bhompewr-kc.html" target="_blank" title="Как разобрать файл XML с помощью Nokogiri и рубин"> Как разобрать файл XML с помощью Nokogiri и рубин </a> </li> <li class="side_article_list_item"> 3. <a href="http://ru.voidcc.com/question/p-tpyjrvsr-bcz.html" target="_blank" title="Проблема получения XML значение атрибута узла с nokogiri"> Проблема получения XML значение атрибута узла с nokogiri </a> </li> <li class="side_article_list_item"> 4. <a href="http://ru.voidcc.com/question/p-njyotrbg-pt.html" target="_blank" title="Nokogiri разобрать XML с xpath"> Nokogiri разобрать XML с xpath </a> </li> <li class="side_article_list_item"> 5. <a href="http://ru.voidcc.com/question/p-nepvikeu-bcn.html" target="_blank" title="Как разобрать странный XML-файл с помощью Nokogiri?"> Как разобрать странный XML-файл с помощью Nokogiri? </a> </li> <li class="side_article_list_item"> 6. <a href="http://ru.voidcc.com/question/p-gpyyuuws-boe.html" target="_blank" title="Как разобрать XML-элемент Nokogiri?"> Как разобрать XML-элемент Nokogiri? </a> </li> <li class="side_article_list_item"> 7. <a href="http://ru.voidcc.com/question/p-kbxjyrsf-wo.html" target="_blank" title="Как разобрать XML с помощью селекторов Nokogiri css, используя циклы?"> Как разобрать XML с помощью селекторов Nokogiri css, используя циклы? </a> </li> <li class="side_article_list_item"> 8. <a href="http://ru.voidcc.com/question/p-dffmkcba-ra.html" target="_blank" title="Добавление узла с помощью Nokogiri"> Добавление узла с помощью Nokogiri </a> </li> <li class="side_article_list_item"> 9. <a href="http://ru.voidcc.com/question/p-ajcnrylb-tr.html" target="_blank" title="Использование Nokogiri Как изменить текстовое значение узла с помощью Nokogiri :: XML :: Text неверное число аргументов"> Использование Nokogiri Как изменить текстовое значение узла с помощью Nokogiri :: XML :: Text неверное число аргументов </a> </li> <li class="side_article_list_item"> 10. <a href="http://ru.voidcc.com/question/p-sxkdtrtt-wq.html" target="_blank" title="Как изменить содержимое узла с помощью Nokogiri?"> Как изменить содержимое узла с помощью Nokogiri? </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://ru.voidcc.com/contact">Свяжитесь с нами</a></li> <li>© 2020 RU.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>