我需要检查 XML 文档是否包含给定的 XML DOM 子树。我只需要确保该子树中的所有元素和属性都存在于文档中。但是,文档的子树中可以有更多与给定子树匹配的元素或属性进行比较。我希望在比较中跳过它们。
到目前为止,我已经实现了自己的解决方案,该解决方案在给定的 XML 文档中查找由 Node 类表示的子树。该 Node 类仅包含比较所需的属性 - 元素名称、文本内容、子节点列表和属性映射。我已经实现了自己的类,但没有使用 org.w3c.dom.Node,因为它太大,包含许多对于我的测试场景来说不必要的属性。由根 Node 元素表示的子树被一个又一个元素迭代,并使用 XPath 在给定的 XML 文档中搜索其每个子树,直到检查整个树或找不到任何子树。
仅当我需要检查子树是否存在时,此解决方案才有效。但是,我用它来检查经常更改的大型配置文件,并且很难找到发生更改的确切位置。这就是为什么我考虑使用一些现有的解决方案,它具有更好的输出并且可以轻松看到差异。不幸的是,我找不到任何符合我的标准的东西。
有什么工具可以实现这一点吗?我听说过 XMLUnit 并快速浏览过它,但我不确定它是否能够在忽略任何其他元素或属性的情况下在文档中查找子树。如果可能的话,您能否向我展示如何在 XMLUnit 中执行此操作的示例?
最佳答案
不,这不是 XMLUnit 1.x 非常适合的事情。您可以使用 XPath 获取子树的根节点,将它们导入到新文档中并进行比较 - 但仍然需要过滤掉您不感兴趣的所有差异。
我们目前正在开发 XMLUnit 2.x,它可能在某一时刻包含可以帮助您的工具(目前它对您来说不会比 1.x 更好),但它还远未完成。
关于java - 如何检查 XML 文档中是否存在子树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339303/