java - 使用 oracle.xml.differ.XMLDiff 在 Java 中比较 XML 文档的问题

标签 java xml oracle

我在尝试使用 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 包,它应该可以解决问题。

最佳答案

在单元测试中,我使用 org.custommonkey.xmlunit.Diff 来比较 xml 内容。参见 http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/Diff.html

我正在比较 xml 字符串,但您也可以比较 xml w3c 文档。我希望您可以将 XMLDocument 转换为 org.w3c.dom.Document 的字符串。

我的测试用例是这样的:

String actualXML = SomeClass.getElement().asXML();
String expectedXML = IOUtils.toString(this.getClass().getResourceAsStream("/expected.xml"));

org.custommonkey.xmlunit.Diff myDiff = new Diff(StringUtils.deleteWhitespace(expectedXML), StringUtils.deleteWhitespace(actualXML));
assertTrue(MessageFormat.format("XML must be simular: {0}\nActual XML:\n{1}\n", myDiff, actualXML), myDiff.similar());

附注我还使用 apache commons StringUtils.deleteWhitespace() 方法,因为我对空格差异不感兴趣。

关于java - 使用 oracle.xml.differ.XMLDiff 在 Java 中比较 XML 文档的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975415/

相关文章:

java - "VK_..."keyCodes 是方法还是对象?

java - Random 和 RandomGenerator 的区别

java - 将 JPanel 添加到 JPanel 数组

sql - 查找时间戳和标识不按顺序排列的行的有效方法是什么?

sql - 使用 SQL 语句调试 Shell 脚本时出错到 V_$UNDOSTAT

java - 发现 'x'和 'y'之间的线性运算

ruby - 为什么我不能从根元素中带有命名空间的 XPath 获得结果?

java - 在 Android 应用程序中嵌入网页

iphone - xPath 分组如何?

java - JPA:在单个持久性单元上映射多个 Oracle 用户