使用Nokogiri解析段落元素的内容

时间:2011-10-22 07:11:05

标签: ruby-on-rails ruby xml regex nokogiri

我想知道使用Nokogiri解析内容块的正确方法:

我有一些文档要解析它们最初包含的格式,其中每个主容器都是<p>。奇怪的是,每个信息中的主要信息都用<font>标签进行划分。

有效地,<p>内容的库存样本包含以下内容并且是典型示例(一些内容有更多内容,一些内容少得多):

<p>
  <font size="5" face="Arial, Helvetica, sans-serif" color="#00CCAA" class="">
    <font color="#AAFF33" class="">
      October 10, 1990 - Maybe a Title
    </font>- 
    <font size="4" class="">
      Some long text here.         
      <font color="#66CC00" class="">
        <a href="SourceTitle/date.pdf">[Blah Blah, October 27, 1982 p. 2</a>
        ]
      </font>. 
      More content. 
      <font color="#00FF33" class="">[Another Source, 1971, issue 01/4]
      </font>. 
    </font>
    <font size="5" face="Arial, Helvetica, sans-serif" color="#00CCAA" class="">
      <font color="#AAFF33" class=""><font size="4" color="#00CCAA" class="">
        Another fantastic article. 
        <a href="SourceTitle/Date.pdf">[Some Source, October 4, p.6]</a>
      </font>
    </font>
  </font>
</font>
</p>

本质上,“font size”属性是文章中每个组件的不同之处。要提取的要点是FIRST <font size ="5"...(即文章日期和主标题,如果给出标题)标签,然后是实际内容。

目前我的所有段落块都出现了:doc.xpath('//p').each do |node|

但是我不确定是否应该再通过Nokogiri来解析它的内容,或者我是否应该通过正则表达式运行它。我希望通过在初始块中使用嵌入式xpath发现来拉出元素,这是一个“正确”执行此操作的小示例。我假设有一种方法可以根据字体大小划分来提取子组件,但我还没有看到这个具体的例子。

1 个答案:

答案 0 :(得分:2)

这有助于您入门吗?

>> doc.xpath('//p').each do |node|
..     puts node.xpath("font[@size='5']/font").first.content.strip
..   end #=> 0
October 10, 1990 - Maybe a Title

为您需要的其他部分构建类似的表达式并完成: - )