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

标签 java xml comparison xmlunit

我需要检查 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/

相关文章:

java - Acceleo - 与 Java 应用程序的跨模型引用

java - spring webmvc框架中的TransactionRequiredException

java - 如何在给定其他数组的情况下创建新的锯齿状数组?有没有一种方法可以从数组中删除元素?

java - 将 TextView 从 xml 加载到 TextSwitcher

python - Django:如何渲染 XML 文件,然后在同时渲染的 View 中使用该 xml?

java - 如何比较Java中几乎相似的字符串? (字符串距离测量)

java - Maven 多个存储库——maven 究竟如何决定哪个存储库获取哪个 Artifact ?

xml - 防止 `xmlValue` 剥离 <br/> 标签

Python对数组或列表中的元素进行成对比较

python - 无序比较两个 NumPy 数组