我过去曾结合使用 Xerces 和 CPPUnit 来完成此任务。在我的测试用例中,我会在 setUp() 函数中使用 Xerces API 创建一个 DOM 对象。这个 DOM 将代表我的预期结果。然后,在测试用例本身中,我将读取 XML 文件,并且被测试的类将填充一个表示文件内容的 DOM 对象。为了检查相等性,我将通过 Xerces API (DOMTreeWalker) 遍历两个 DOM 树,并在比较 DOM 节点的内容时使用 CPPUnit 断言。这有点乏味,但当时没有可以模仿 XmlUnit 的框架。我想 Google Test 在完成这项任务时会和 CPPUnit 一样好用。
Xerces API 对 XPath 表达式有一些支持:
http://xerces.apache.org/xerces-c/faq-parse-3.html#faq-2
对于验证,您需要设置一个错误处理程序,如此处所述,并将其合并到您的测试用例中:
在 Xerces C++ 中验证文档
对于 XSLT 转换检查,您需要使用 Xalan。它适用于 Xerces,所以我预计不会有任何重大困难:
http://xalan.apache.org/old/xalan-c/index.html
我找不到任何在 C++ 中打包类似 XMLUnit 的操作的明显产品。所以答案是我认为你必须自己动手。祝你好运。