2012-02-01 61 views
2

對兩個不同的html文檔進行差異變成了一個完全不同的問題,而不是簡單地對純文本進行差異化。例如,如果我之間做一個天真的LCS DIFF:有沒有在HTML文檔之間做差異的紅寶石?

Google</p> 

Google</a></p> 

的差異的結果並非如此:

</a> 

/a></ 

我已經嘗試了大多數那些聲稱是html diff的gem,但它們都似乎只是實現基於文本的LCS diff。是否有任何gem在考慮html標籤時進行差異化?

+0

我不知道有什麼,但這並不意味着它們不存在。使用Nokogiri生成可比較的元素樹並執行基於樹的差異,創建這樣的寶石將會很有趣。嘗試在http://rubygems.org搜索官方寶石回購 – Phrogz 2012-02-01 17:44:49

+0

可能重複[在Ruby中的Diff 2 XML文檔?](http://stackoverflow.com/questions/1558613/diff-two-xml-doc-in-紅寶石) – Phrogz 2012-02-01 17:52:44

回答

-1

後的寶石爲我做這麼多的搜索,我發現,我可以簡單地做一個線二解析引入nokogiri文檔之間的比較:

def should_match_html(html_text1, html_text2) 
    dom1 = Nokogiri::HTML(html_text1) 
    dom2 = Nokogiri::HTML(html_text2) 
    dom1.to_s.should == dom2.to_s 
end 

然後,您只需在您的規範補充一點:

should_match_html expected_html, actual_html 

最好的部分是,內置的rspec匹配器會自動爲您提供不匹配行的逐行比較結果。