2012-07-14 72 views
1

我的HTML結構使用引入nokogiri獲取兩個標記之間的文本

<div class="line"> 
    <h2>Header</h2> 
    <h3>Mailing Address</h3> 
    2349 Glorem ipsun lorem ipsum CA 95833<br> 
    <br>  

    Phone: 111-111-2111&nbsp;&nbsp;&nbsp;&nbsp;Fax: 111-511-1111<br> 
    <a onfocus="blur()" target="_blank&quot;" href="">some text</a><br> 
    <a onfocus="blur()" target="_blank" href="">some address</a><br> 
    <div><p></p></div>  

    <h3>Contact(s)</h3> 
</div> 

的HTML頁面包含幾個<div class=line></div>元素。對於每個div我需要提取電話和傳真與其他數據的數組。我試過使用

doc.css("div#ctl00_cphContent_divBrowseByMember").each do |div| 
    div.css("div.line").each do |line| 
    line.xpath('//text()[preceding-sibling::br and following-sibling::a]').text.strip 
    end 
end 

它什麼都不返回並返回超時錯誤。 如果我嘗試 line.xpath('//text()[preceding-sibling::br and following-sibling::a]')[0].text.strip 將返回所有其他div相同的電話和傳真。請建議任何其他解決方案,這將幫助我。

回答

3

最簡單的辦法:

phone, fax = line.text.scan /\d{3}-\d{3}-\d{4}/ 
+0

謝謝。它的工作原理 – Raji 2012-07-14 10:47:09

+0

不客氣:) – pguardiario 2012-07-14 11:29:18

+1

根據你的問題,使用正則表達式來解析HTML/XML是愚蠢的錯誤。我不知道你是否可以控制這個文檔的HTML,但是如果你正在處理一個表格行,解析會更容易和更一致。這個HTML格式不好的線索是它有'       '在裏面。多個「
」也是一個不好的跡象,往往不是。 – lyonsinbeta 2012-07-14 14:06:16

相關問題