在Ruby中区分两个XML文档?
使用什么最简单的方法来查看两个xml文件之间的差异 我调查了Hpricot和Nokogiri,但找不到任何好的比较方法。我也研究过unix工具,比如,但更愿意使用ruby中的一些东西 有人有什么想法吗?怎么样?在Ruby中区分两个XML文档?,xml,ruby,diff,Xml,Ruby,Diff,使用什么最简单的方法来查看两个xml文件之间的差异 我调查了Hpricot和Nokogiri,但找不到任何好的比较方法。我也研究过unix工具,比如,但更愿意使用ruby中的一些东西 有人有什么想法吗?怎么样? 您可以将两个xml文档导出到数组中,并使用该库获取差异。我发现使用Java库比使用任何本机解决方案都更容易 require 'java' require '/usr/share/java/xmlunit.jar' java_import org.custommonkey.xmlunit.
您可以将两个xml文档导出到数组中,并使用该库获取差异。我发现使用Java库比使用任何本机解决方案都更容易
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
require'java'
需要“/usr/share/java/xmlunit.jar”
java_import org.custommonkey.xmlunit.Diff
放置差异新(“,”)。相似
放置差异新(“,”)。相似
当然,这意味着您必须使用JRuby而不是CRuby,但在我的例子中,这并不是一个明显的障碍。另一个选项是通过xml simple对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?
需要“rubygems”
需要“xmlsimple”
需要“diff”
def正则化(xml)
XmlSimple.xml_out(XmlSimple.xml_in(xml))
结束
def diff_xml(a,b)
差异新(正则化(a).拆分(“\n”)、正则化(b).拆分(“\n”))
结束
将diff_xml(“,”)。diff.empty?
将diff_xml(“,”)。diff.empty?
请尝试。它可以告诉您两个XML文档在语义上是否等价我不认为这是一个重复的问题。扩散树和扩散序列是不同的(虽然抽象相关)问题。链接不再工作!