Различаются два документа XML в Ruby? [Дубликат]

Какой самый простой способ увидеть разницу между двумя XML-файлами?

Я изучил Hpricot и Nokogiri, но не смог найти хороших методов сравнения. Я также изучал инструменты Unix, такие как diffxml , но предпочел бы использовать что-то в ruby.

У кого-нибудь есть идеи?

13.10.2009 07:08:39
Я не думаю, что это дублирующий вопрос. Различающиеся деревья и различающиеся последовательности - это разные (хотя и абстрактно связанные) проблемы.
RecursivelyIronic 13.08.2011 01:57:31
4 ОТВЕТА

А как насчет diff.rb ?
Вы экспортируете два своих XML-документа в массивы и получаете разность с этой библиотекой.

1
13.10.2009 09:18:18
ссылка больше не работает!
Michael Lihs 11.07.2015 22:44:28

Я обнаружил, что использовать библиотеку 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
12.01.2012 05:05:05

Другой вариант - упорядочить ваш xml, пропустив его через xml-simple, а затем выполнить массив diff для строк вывода:

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?
0
12.01.2012 05:23:15

Попробуйте эквивалентный XML-гем . Он может сказать вам, если два XML-документа семантически эквивалентны

1
21.08.2012 21:16:50