2012-02-10 46 views
3

我可以找到libxml2的大部分示例都是關於加載/解析XML文件的。但我只想寫他們;該代碼將永遠不需要解析任何文件。有一個示例using different writers,它顯示如何使用file,memory,DOMtree模型。libxml2編寫者的差異

翻看代碼,我發現它們之間沒有任何顯着差異,當談到寫作。如何決定哪個更好用? (換句話說,在哪些情況下比其他人好?)

回答

2

您指定的4個功能之間的差異很小,全部關於內容的位置。正如Alex所說,如果內存是一個問題,使用xmlNewTextWriterFilename的優點是不需要將結果保存在內存中。

您提到的所有方法所屬的xmlWriter API都是提供的API之一。另一種說明是tree API。 xmlWriter更像是調用write()來打印到文件,而樹更像是在內存中構建嵌套結構。

如果您的數據是以非線性方式構建的,基於以後的信息添加/更改內容等,基於樹的版本可能會更好。這需要使用流xmlWriter接口進行一些解決方法/緩存,因爲一旦它們輸出完畢就無法改變它們。但是,內存樹可以完全調整,直到它被序列化。

樹API有其不利的一面,它必須保持整個內存的東西;經驗法則是解析樹的內存要求是4倍於序列化xml文件大小。

我的決定通常取決於我是否期望創建大型文檔。如果沒有,我會使用如果樹api,因爲靈活性會在那裏,如果我想要它。如果我知道效率會是一個問題,或者我會用大量的東西來處理,那麼流式xmlWriter就是要走的路。

樹API示例可以在這裏找到:http://xmlsoft.org/examples/index.html#Tree

1

如果您在內存有限的設備上,則可能不想使用DOM或基於內存的方法。在這種情況下,您可能希望在遍歷要寫入XML的數據結構時寫出文件。