我想知道使用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发现来拉出元素,这是一个“正确”执行此操作的小示例。我假设有一种方法可以根据字体大小划分来提取子组件,但我还没有看到这个具体的例子。
答案 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
为您需要的其他部分构建类似的表达式并完成: - )