我正在使用 xercesc (C++) 库通过 xercesc::XercesDOMParser 类处理 XML 文档。 比较两个 XML 文档的最简单方法是什么? 说吧,我用:
XercesDOMParser parser1;
parser1.parse("1.xml");
DOMDocument* doc1 = parser1.getDocument();
XercesDOMParser parser2;
parser2.parse("2.xml");
DOMDocument* doc2 = parser2.getDocument();
我怎么知道 doc1 和 doc2 从 xml 的角度来看是相同的(即它们可以有不同的空格/行尾/缩进,但代表相同的 XML 内容)?
您可以将两个文档序列化为字符串,然后比较字符串。
此方法可确保比较 XML 文档的内容,而不管格式差异如何,如 spaces、EOLs 或 indentation。
这里有一个简单的代码来实现它:
#include <xercesc/dom/DOMImplementation.hpp>
#include <xercesc/dom/DOMWriter.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>
bool compareXMLDocuments(DOMDocument* doc1, DOMDocument* doc2)
{
XMLCh tempStr[100];
XMLString::transcode("LS", tempStr, 99);
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
DOMWriter* writer = static_cast<DOMImplementationLS*>(impl)->createDOMWriter();
XMLCh* xml1 = writer->writeToString(doc1);
XMLCh* xml2 = writer->writeToString(doc2);
bool isEqual = XMLString::equals(xml1, xml2);
XMLString::release(&xml1);
XMLString::release(&xml2);
writer->release();
return isEqual;
}