Nokogiri取代任意节点

时间:2017-11-14 21:54:37

标签: ruby xpath replace nokogiri

我试图削减一些立法。这是代码的摘录:

<h5>
<span class="expanderComparator clickable">&nbsp;</span>
<span class="context-menu">&nbsp;</span>
<a href="index.html#a340">
<strong>Art. 340</strong>
</a>
<sup>
<a href="#fn-#a340-1">1</a>
</sup>
<a href="index.html#a340">Mesures conservatoires</a>
</h5>

每篇文章都会重复这段代码(可能超过一千),但其结构基本上采用相同的模式。

我试图建立一个数组:

a340 = { 'number' => '340', 'title' => 'Mesures conservatoires'}

所以显然我看了Nokogiri,这似乎是合适的。以下是问题:

  • 此作品<sup><a href="#fn-#a340-1">1</a></sup>需要替换为空格(&#34;&#34;)=&gt; h1 = @doc.at_xpath "//sup/a" h1.content = " "

  • 需要删除所有spana代码

  • 最终,只保留h5标记内的内容(因为还有其他膨胀,不需要)=&gt; .css("h5").text

我基本上能够达到以上所有目标,但不知怎的,我无法将它们链接到一个逻辑软件中。

非常感谢任何帮助!

警告:它只需要纯粹的红宝石,所以没有铁轨:(

1 个答案:

答案 0 :(得分:0)

也许可以访问'#lawcontent .collapseable h5'

require 'nokogiri'
require 'open-uri'

url = 'https://www.admin.ch/opc/fr/classified-compilation/20061121/index.html'
doc = Nokogiri.HTML(open url)
articles_hash = doc.css('#lawcontent .collapseable h5').map do |element|
  {
    'number' => element.css('a strong').text.sub(/\AArt. /, ''),
    'title'  => element.css('a:last-child').text.sub(/\AArt. \d+ |\A\d+/, '')
  }
end
puts articles_hash

# [
#  {"number"=>"1", "title"=>"Objet"}, 
#  {"number"=>"2", "title"=>"Causes de nature internationale"},
#  {"number"=>"3", "title"=>"Organisation des tribunaux et des autorit\u00E9s de conciliation"},
#  ...
# ]

这将迭代并获得文章#407。