Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中区分两个XML文档?_Xml_Ruby_Diff - Fatal编程技术网

在Ruby中区分两个XML文档?

在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文件之间的差异

我调查了Hpricot和Nokogiri,但找不到任何好的比较方法。我也研究过unix工具,比如,但更愿意使用ruby中的一些东西

有人有什么想法吗?

怎么样?

您可以将两个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文档在语义上是否等价

我不认为这是一个重复的问题。扩散树和扩散序列是不同的(虽然抽象相关)问题。链接不再工作!