2013-03-01 22 views
2

我有一個65Mb XML文件,我正在使用PUGIXML加載和修改。問題是我需要保持更新並保存到磁盤,以便其他文件可以訪問。我不想實現一個數據庫,那麼是否有一種方法可以讓我進行修改,並保存這些少量修改,而不是將整個文檔轉儲到文件中?每次我保存xml文件時,我都會注意到延遲3-4秒。使用PUGIXML保存大型XML文件反覆需要大量時間

回答

0

這是一個老問題。但無論如何,讓我回答。 pugixml有一個通過write接口保存數據的模式。這有效地解決了必須轉儲整個文件的問題,因爲您可以將數據分塊成小塊並寫入文件。

從:

這是一個簡單的接口與單個功能,這就是所謂在輸出過程 數次文檔數據塊作爲 輸入:

class xml_writer 
{ 
public: 
    virtual void write(const void* data, size_t size) = 0; 
}; 

void xml_document::save(xml_writer& writer, const char_t* indent = "\t", 
         unsigned int flags = format_default, 
         xml_encoding encoding = encoding_auto) const; 

。 ..

寫函數調用的塊比較大(大小通常是 幾千字節,除了最後的塊可能很小),所以 在實現中通常不需要額外的緩衝。

還有一種方法可以解決這個問題:一次保存一個子樹。再次,從documentation

要保存的單個子樹中,提供瞭如下功能:

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接口的對象。