2011-10-22 40 views
0

我想知道解析的内容与引入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 ="5"...(即文章日期和主标题,如果有标题)标记,然后是实际内容。

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

但是我不知道我是否应该再让它通过引入nokogiri分析出它的内容,或者我应该只是通过正则表达式运行它。我希望有一个小例子“正确地”这样做,我假设,在初始块内使用嵌入式xpath发现,将元素拉出。我认为有一种方法可以根据字体大小的分界拉出子组件,但我还没有看到这个具体的例子。

+0

你能不能给你想要得到的目标文件的例子吗? – WarHog

+0

不幸的是,我不能提供一个实际的数据示例,因为它是包含在内容中的私人信息。我已经在整个机构的上下文中提取了一些“行”信息供您查看:http://j.mp/qbpJnh – ylluminate

+0

存在某种误解。我的意思是你想要得到的文档的例子 – WarHog

回答

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 

构建您需要的其他地区类似的表述,就大功告成了:-)

+0

完美的,谢谢你去除了我的大脑。 :P – ylluminate

+0

好的,真的很快,发射的对象是'Nokogiri :: XML :: Element',但是在这种情况下,我得到了一个未定义的'content'方法。嗯,还没有看到一个快速的答案。 – ylluminate

+0

对不起,很难从这里知道。玩IRB,检查元素,使用其他自省方法(如'instance_methods')等等。它可能只是一个小事情... –