在Ruby中如何比较两个XML文档的差异?

5

有什么简单的方法可以比较两个xml文件的不同之处?

我查看了Hpricot和Nokogiri,但没有找到好的比较方法。我也看过类似diffxml这样的unix工具,但宁愿使用ruby中的工具。

有人有任何想法吗?


2
我不认为这是一个重复的问题。比较树和比较序列是不同的(虽然抽象上有关联)问题。 - Lucas Wiman
4个回答

1

尝试使用 equivalent-xml gem。它可以告诉您两个XML文档是否在语义上等效。


1

diff.rb 呢?
你可以将两个 XML 文档导出到数组中,并使用该库获取差异。


链接已失效! - Michael Lihs

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?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接