我在尝试使用oracle.xml.differ.XMLDiff比较 Java 中的 2 个 XML 文档时遇到问题。该代码已完全实现,并且我希望它可以正常工作,直到我发现在某些情况下没有拾取属性更改。为了证明这一点,我有以下内容:
设置:
DOMParser parser = new DOMParser();
parser.setPreserveWhitespace(false);
parser.parse(isCurrent);
XMLDocument currentXmlDoc = parser.getDocument();
parser.parse(isPrior);
XMLDocument priorXmlDoc = parser.getDocument();
XMLDiff xmlDiff = new XMLDiff();
xmlDiff.setDocuments(currentXmlDoc, priorXmlDoc);
在第一种情况下, Strike的属性变化很好。我有以下 2 个 XML 文件:
XML1
<Periods>
<Period Start="2011-03-28" End="2011-04-17" AverageStart="" AverageEnd="" Notional="6000000.0000" OptionType="Swap" Payment="2011-04-19" Strike="72.0934800" Underlying="ZA" ResetStrike="No" ResetNotional="No" QuotingDate="2011-04-17" Multiplier="1.000000" PlusConstant="0.000000" StopLossPercent="" StopLossLevel=""/>
</Periods>
XML2
<Periods>
<Period Start="2011-03-28" End="2011-04-17" AverageStart="" AverageEnd="" Notional="6000000.0000" OptionType="Swap" Payment="2011-04-19" Strike="0.0000000" Underlying="ZA" ResetStrike="No" ResetNotional="No" QuotingDate="2011-04-17" Multiplier="1.000000" PlusConstant="0.000000" StopLossPercent="" StopLossLevel=""/>
</Periods>
第二种情况,Strike的属性变化没有被拾取。我有以下 2 个 XML 文件:
XML1
<Periods>
<Period Start="2011-03-28" End="2011-04-30" Payment="2011-05-02" Notional="5220000.000000" Strike="176.201900" StopLossPercent="" StopLossLevel=""/>
</Periods>
XML2
<Periods>
<Period Start="2011-03-28" End="2011-04-30" Payment="2011-05-02" Notional="5220000.000000" Strike="0.000000" StopLossPercent="" StopLossLevel=""/>
</Periods>
有谁知道我做错了什么,或者 XMLDiff 包中是否有错误?
或者,是否有人知道可以以相同方式使用的不同工具,只是识别 XML 文件之间节点和属性的差异,而不管顺序如何?
谢谢, 米莱娜
更新:由于获得批准在我们的系统中使用的新外部包非常耗时,因此在理想情况下,我想找到一种解决方案来使 oracle.xml.differ.XMLDiff 工作。显然,如果确实存在错误并且无法绕过,我会考虑其他工具。
更新 2:由于似乎没有人知道 XMLDiff 错误,我将尝试实现建议的 XMLUnit 包,它应该可以解决问题。