如何检查XML文档中是否存在子树

时间:2014-10-13 11:49:18

标签: java xml comparison xmlunit

我需要检查XML文档是否包含给定的XML DOM子树。我只需要确保该子树中的所有元素和属性都存在于文档中。但是,文档的子树中可以有更多元素或属性与给定的子树相匹配以进行比较。而且我希望从比较中跳过它们。

到目前为止,我已经实现了自己的解决方案,该解决方案在给定的XML文档中找到由Node类表示的子树。此Node类仅包含比较所需的属性 - 元素名称,文本内容,子节点列表和属性映射。我已经实现了自己的类而没有使用org.w3c.dom.Node,因为它太大了,包含了我测试场景的许多不必要的属性。由根节点元素表示的子树迭代一个元素,并使用XPath在给定的XML文档中搜索每个子树,直到检查整个树或找不到任何子树。

只有当我需要检查子树是否存在时,此解决方案才能正常工作。但是,我使用它来检查经常更改的大型配置文件,并且很难找到发生更改的确切位置。这就是为什么我考虑使用一些现有的解决方案,它具有更好的输出并且可以轻松地看到差异。不幸的是,我找不到符合我标准的任何内容。

是否有任何工具允许这样做?我听说过XMLUnit并快速浏览一下,但我不确定它是否能够在文档中找到一个忽略任何其他元素或属性的子树。如果可能的话,你能告诉我一个如何在XMLUnit中做这个的例子吗?

1 个答案:

答案 0 :(得分:0)

不,这不是XMLUnit 1.x非常适合的任何内容。您可以使用XPath来获取子树的根节点,将它们导入新文档并进行比较 - 但仍需要过滤掉您不感兴趣的所有差异。

我们目前正在研究XMLUnit 2.x,它可能在某一时刻包含帮助您的工具(目前它不会比1.x更好地工作),但它还远未完成。