我有一个使用PUGIXML加载和修改的65 PUGIXML文件。问题是,我需要保持它的更新和保存到磁盘,以便其他文件可以访问。我不想实现数据库,那么有什么方法可以让我做修改,只保存这些修改,而不是将整个文档转储到文件中呢?我注意到每次保存xml文件时都有3-4秒的延迟。
发布于 2015-06-16 07:55:38
这是个老问题。但不管怎样,让我回答。pugixml具有通过write接口保存数据的模式。这有效地解决了必须转储整个文件的问题,因为您可以将数据块成小块并写入文件。
来自文档
这是一个具有单个函数的简单接口,在输出过程中会多次调用该接口,输入是大量的文档数据: 类xml_writer { public: virtual (constvoid* data,size_t size) = 0;};xml_document::save(xml_writer& xml_document::save,const char_t* indent = "\t",无符号int标志= format_default,xml_encoding编码= encoding_auto); ..。 写函数是用相对较大的块调用的(大小通常是几千字节,除了最后一个可能很小的块),因此在实现中通常不需要额外的缓冲。
还有一种解决这个问题的方法:一次保存一个子树。再一次,来自文档
为了保存单个子树,提供了以下功能:
void xml_node::print(std::ostream& os, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const;
void xml_node::print(std::wostream& os, const char_t* indent = "\t", unsigned int flags = format_default, unsigned int depth = 0) const;
void xml_node::print(xml_writer& writer, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const;这些函数具有与相应的xml_document::save函数相同的参数,并允许您将子树保存到C++ IOstream或实现xml_writer接口的任何对象。
https://stackoverflow.com/questions/15168817
复制相似问题