2009-10-13 123 views
5

什麼是最簡單的方法來查看使用兩個XML文件之間的區別?在Ruby中比較兩個XML文檔?

我看着Hpricot和Nokogiri,但找不到任何好的比較方法。我也研究過像diffxml這樣的unix工具,但寧願使用紅寶石。

有人有什麼想法嗎?

+2

我不認爲這是一個重複的問題。差異樹和差異序列是不同的(儘管抽象相關)問題。 – RecursivelyIronic

回答

1

diff.rb怎麼樣?
將兩個xml文檔導出到數組並獲取該庫的diff。

+0

鏈接不再有效! –

0

我發現用起來比較方便的Java庫XMLUnit比任何原生解決方案

require 'java' 
require '/usr/share/java/xmlunit.jar' 
java_import org.custommonkey.xmlunit.Diff 

puts Diff.new("<a></a>", "<a/>").similar 
puts Diff.new("<a/>", "<b/>").similar 

當然,這意味着你必須使用JRuby的,而不是CRuby,但這不是一個顯著的障礙我案件。

0

另一種選擇是由圓絆倒它通過XML的簡單,然後做一個數組差異在輸出的線來規範你的XML:

require 'rubygems' 
require 'xmlsimple' 
require 'diff' 

def regularize(xml) 
    XmlSimple.xml_out(XmlSimple.xml_in(xml)) 
end 

def diff_xml(a,b) 
    Diff.new(regularize(a).split("\n"), regularize(b).split("\n")) 
end 

puts diff_xml("<doc><a/></doc>", "<doc><a></a></doc>").diffs.empty? 
puts diff_xml("<doc><a/></doc>", "<doc><b/></doc>").diffs.empty?