压缩pugixml中的数据

时间:2018-03-03 14:09:29

标签: c++ qt qt5 pugixml

我正在尝试压缩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对其进行压缩?

1 个答案:

答案 0 :(得分:1)

确保在 pugiconfig.hpp 文件中注释了no-stl define:

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

stringstream标头包含是必需的:

 #include <sstream>

那就是说,注意:你直接在c_str()对象上调用一个非现有方法std::ostringstream,而不是在str()(和你的编译器)返回的底层字符串上调用输出应该是这样的:'std :: basic_ostringstream'中没有名为'c_str'的成员。)

您的代码应该是这样的:

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