Xercesc DOMDocument - 比较两个 XML 文档

问题描述 投票:0回答:1

我正在使用 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 内容)?

c++ xml xerces xerces-c
1个回答
0
投票

您可以将两个文档序列化为字符串,然后比较字符串。

此方法可确保比较 XML 文档的内容,而不管格式差异如何,如 spacesEOLsindentation

这里有一个简单的代码来实现它:

#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;
}

© www.soinside.com 2019 - 2024. All rights reserved.