我的PC上存储了一系列xml文件。我使用宝石Nokogiri存储了这些文件的内容。我需要一次比较两个xml的内容。如果xml文件之间存在差异,我想在漂亮的html报告中显示这些差异,以供其他人查看。
有人知道该怎么做吗?
我正在比较的第一个xml文件:
input_gather("y", "n", None, agree_caesar_is_bad, disagree_caesar_is_bad, None, answer)
我正在比较的第二个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<SourceDetails>
<Origin>Origin</Origin>
<Identifier>Identifier</Identifier>
<Timestamp>2001-12-31T12:00:00</Timestamp>
</SourceDetails>
<AsOfDate>2001-01-01</AsOfDate>
<Instrument>
<ASXExchangeSecurityIdentifier>ASX</ASXExchangeSecurityIdentifier>
</Instrument>
<Rate>0.0</Rate>
答案 0 :(得分:2)
使用Diffy进行比较的替代解决方案。这是一个扁平字符串比较,但确实具有html格式的输出。
require 'diffy'
puts Diffy::Diff.new('./docOne.xml', './docTwo.xml', :source => 'files').to_s(:html)
#Example output
<div class="diff">
<ul>
<li class="unchanged"><span><root></span></li>
<li class="del"><del>test</del></li>
<li class="unchanged"><span><foo></foo></span></li>
<li class="ins"><ins><bar></bar></ins></li>
<li class="unchanged"><span></root></span></li>
</ul>
</div>
答案 1 :(得分:1)
有一个nokogiri-diff gem可用于执行此操作。它只是找到差异并返回一个Enumerable
对象。
require 'nokogiri/diff'
xmlDoc1 = File.open("docOne.xml") { |f| Nokogiri::XML(f) }
xmlDoc2 = File.open("docTwo.xml") { |f| Nokogiri::XML(f) }
xmlDoc1.diff(xmlDoc2).each do |diff|
puts diff
end
#2nd example
doc1 = Nokogiri::XML("<root><aliens><alien><name>Alf</name></alien></aliens></root>")
doc2 = Nokogiri::XML("<root><alienz><alien><name>Alf</name></alien></alienz></root><test></test>")
xmlDoc1.diff(xmlDoc2).each do |diff|
puts diff
end
#2nd example output
<root>
<aliens>
<alien>
<name>Alf</name>
</alien>
</aliens>
</root>
-
<aliens>
<alien>
<name>Alf</name>
</alien>
</aliens>
+
<alienz>
<alien>
<name>Alf</name>
</alien>
</alienz>