为了账号安全,请及时绑定邮箱和手机立即绑定

请问比较Java中2个XML文档的最佳方法

请问比较Java中2个XML文档的最佳方法

慕虎7371278 2019-08-02 02:02:45
比较Java中2个XML文档的最佳方法我正在尝试编写一个应用程序的自动化测试,该测试基本上将自定义消息格式转换为XML消息,并将其发送到另一端。我有一组很好的输入/输出消息对,所以我所需要做的就是发送输入消息并侦听XML消息的另一端。当需要比较实际输出和预期输出时,我遇到了一些问题。我的第一个想法是对预期消息和实际消息进行字符串比较。这种方法不能很好地工作,因为我们所拥有的示例数据的格式并不总是一致的,而且经常会出现用于XML命名空间的不同别名(有时甚至根本不使用名称空间)。我知道我可以解析两个字符串,然后遍历每个元素并亲自比较它们,这不会太困难,但我觉得有一个更好的方法或一个库我可以利用。总之,问题是:如果两个Java字符串都包含有效的XML,那么如何确定它们在语义上是否等价呢?如果你有办法决定区别是什么,那就加分。
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

下面将使用标准JDK库检查文档是否相等。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setCoalescing(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setIgnoringComments(true);
DocumentBuilder db = dbf.newDocumentBuilder();

Document doc1 = db.parse(new File("file1.xml"));
doc1.normalizeDocument();

Document doc2 = db.parse(new File("file2.xml"));
doc2.normalizeDocument();

Assert.assertTrue(doc1.isEqualNode(doc2));

规范()是为了确保没有循环(从技术上讲不会有循环)

但是,上面的代码将要求元素中的空格是相同的,因为它保留并计算它。Java附带的标准XML解析器不允许设置特性以提供规范版本或理解xml:space如果这将是一个问题,那么您可能需要一个替代的XML解析器,例如Xerces或使用JDOM。



查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 342 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信