2011-09-29 46 views
0

相關片段:HTML從test.html的與使用Ruby 1.8.7角度來說,Hpricot刮VS 1.9.2

<div id="seat_31F_vacant" class="seatVacant" onclick="UpdateHost(this);Common.DoPostBack('lbtPostBack','31F');" onmouseover="Seat_onMouseOver(this)" onmouseout="Seat_onMouseOut(this)">F</div> 

現在考慮這個Ruby代碼:

doc = Hpricot(test.html) 

doc.search("//div[@class='seats']").each do |seat|   
    @vacant_seat += seat.to_s.scan(/id="seat_(.*)_vacant/) 
end 

@log.info @vacant_seat.to_s 

當登錄@ vacant_seat.to_s這就是我結束了:

[ 「31F」],[ 「31E」],[ 「31D」],[ 「31C」]](使用1.9.2

31F31E31D31C(使用1.8.7

這意味着如果我不@vacant_seat [0] .to_s我會得到:

[ 「31F」]1.9.2)和31F1.8.7

我想結束31F(就像我做1.8.7)

任何thougts?有沒有一種通用的方法可以在兩個Ruby版本中使用?我需要提取ID屬性中位於下劃線字符(_)之間的字符串(例如31F)。如果有更好的方法來做到這一點,我會很高興聽到它。

+0

這是關係到黃瓜或watir? –

+0

如果您提供相關的HTML,則重現該問題會更容易。 –

+0

感謝您的意見。我想稍後使用它來自動化一些測試(使用watir-webdriver並在測試運行期間單擊收集的元素),並且認爲這可能是人們做這件事的常見問題(scraping htmls)。我也可以看到它更像是一個Ruby的東西,所以如果你認爲標籤有誤導性,我可以刪除它們。 – kfa

回答

1

Ruby 1.9.2更改爲數組。它用於連接所有元素並打印它們,如31F31E31D31C

現在它增加了花哨的格式來使它看起來像一個數組,因此您可以看到數組中的括號,並引用它們中的字符串元素,因此您得到[["31F"], ["31E"], ["31D"], ["31C"]]

看起來像@vacant_seat是一個數組的陣列,所以這就是爲什麼@vacant_seat[0].to_s爲您提供["31F"]

如果您只需要包含元素的數組,那麼它們都是相同的數組,只是以不同的方式打印。

現在,您可以使用join來調用1.8.7中的to_s。 @vacant_seat.join #=> 31F31E31D31C@vacant_seat[0].join #=> 31F,會給你你想要的。

+0

感謝您的回答。怎麼可能相同的代碼是1.9.2陣列的數組?我認爲這兩個版本的數組處理方式都是一樣的。你似乎有一個格式化的東西,雖然..一個數組的to_s方法將打印出來的方括號和引號等...... – kfa