首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用oracle.xml.differ.XMLDiff比较Java中的XML文档时的问题

使用oracle.xml.differ.XMLDiff比较Java中的XML文档时的问题
EN

Stack Overflow用户
提问于 2013-04-12 15:32:48
回答 1查看 1.5K关注 0票数 3

我在使用oracle.xml.differ.XMLDiff.比较Java中的2个XML文档时遇到了问题。代码是完全实现的,我希望它能够正常工作,直到我发现在某些情况下没有发现属性更改。为了证明这一点,我有以下几点:

设置:

代码语言:javascript
复制
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);

first case中,罢工中的属性更改是拾取罚款。我有以下两个XML文件:

XML1

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>

第二种情况下,中的属性更改是而不是case。我有以下两个XML文件:

XML1

代码语言:javascript
复制
<Periods>
    <Period Start="2011-03-28" End="2011-04-30" Payment="2011-05-02" Notional="5220000.000000" Strike="176.201900" StopLossPercent="" StopLossLevel=""/>
</Periods>

XML2

代码语言:javascript
复制
<Periods>
    <Period Start="2011-03-28" End="2011-04-30" Payment="2011-05-02" Notional="5220000.000000" Strike="0.000000" StopLossPercent="" StopLossLevel=""/>
</Periods>

是否有人知道我是否做错了什么,或者XMLDiff包中是否有bug?

或者,是否有人知道可以以同样的方式使用不同的工具,只需要识别XML文件之间节点和属性的差异,而不管顺序如何?

谢谢,Milena

更新:,因为获得新的外部包在我们的系统中使用是非常耗时的,在理想的情况下,我想找到一个使oracle.xml.differ.XMLDiff工作的解决方案。显然,如果确实存在一个bug,并且这是不能绕过的,我将考虑其他工具。

更新2:,因为似乎没有人知道XMLDiff错误,我将尝试实现建议的XMLUnit包,它应该能做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-15 09:21:12

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

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

我的测试案例是这样的:

代码语言:javascript
复制
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方法,因为我对空白差异不感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15975415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档