我可以为libxml2
找到的大部分示例都是关于加载/解析XML文件的。但我只对编写它们感兴趣;代码永远不必解析任何文件。有一个示例using different writers,其中显示了如何使用file
,memory
,DOM
和tree
模型。
查看代码,我发现在编写时没有任何显着差异。如何确定哪个更好用? (换句话说,在哪些情况下哪一个比其他情况更好?)
答案 0 :(得分:2)
您指定的4个函数之间的差异很小,而且所有这些都与内容的位置有关。正如Alex所提到的,如果内存是一个问题,使用xmlNewTextWriterFilename
的优点就是不需要将结果保存在内存中。
您提到的所有方法所属的xmlWriter API是提供的API之一。另一个值得注意的是tree API。 xmlWriter更像是调用write()来打印到文件,而树更像是在内存中构建嵌套的结构。
如果您的数据是在非线性的情况下构建的,基于后来的信息等添加/更改内容,那么基于树的版本可能会很好。这需要使用流式xmlWriter接口进行一些变通/缓存,因为一旦输出就无法改变。但是,内存中的树可以完全调整,直到它被序列化为止。
树API有一个缺点,它必须保持整个内存;经验法则是解析树的内存要求是序列化xml文件大小的4倍。
我的决定通常取决于我是否希望创建大型文档。如果没有,我使用if api,因为如果我需要它的灵活性。如果我知道效率将成为一个问题,或者我将使用大量的东西,那么流式xmlWriter就是最佳选择。
可以在此处找到答案 1 :(得分:1)
如果您使用内存有限的设备,则可能不希望使用DOM或基于内存的方法。在这种情况下,您可能希望在迭代要写入XML的数据结构时写出文件。