2011-10-22 72 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')等等。它可能只是一個小事情... –