我正在尝试从pugi::xml_document压缩数据。这是我尝试的:

template<class T> void save(const T &object, const QString &path)
{
    pugi::xml_document doc;
    object.exportXML(doc);

    std::ostringstream stream;
    doc.save(stream);

    QByteArray data = qCompress(stream.c_str(), 9);

    QFile outfile(path);
    outfile.write(data);
    outfile.close();
}

但这不起作用,因为doc.save()接受ostream而不是ostringstream。如何从xml_document获取格式化为字符串的树并使用qCompress压缩它?

最佳答案

确保在pugiconfig.hpp文件中注释了no-STL定义:

// Uncomment this to disable STL
// #define PUGIXML_NO_STL

stringstream header 包含是必需的:
 #include <sstream>

也就是说,请注意:您是直接在c_str()对象上调用一个不存在的方法std::ostringstream,而不是在str()返回的其底层字符串上调用(而且您的编译器输出应类似于:在'std中没有名为'c_str'的成员:: basic_ostringstream')。

您的代码应如下所示:
QByteArray data = qCompress(stream.str().c_str(), 9);

关于c++ - 从pugixml压缩数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49085013/

10-09 03:28