libxml2编写器的差异

时间:2012-02-10 21:33:35

标签: c libxml2

我可以为libxml2找到的大部分示例都是关于加载/解析XML文件的。但我只对编写它们感兴趣;代码永远不必解析任何文件。有一个示例using different writers,其中显示了如何使用filememoryDOMtree模型。

查看代码,我发现在编写时没有任何显着差异。如何确定哪个更好用? (换句话说,在哪些情况下哪一个比其他情况更好?)

2 个答案:

答案 0 :(得分:2)

您指定的4个函数之间的差异很小,而且所有这些都与内容的位置有关。正如Alex所提到的,如果内存是一个问题,使用xmlNewTextWriterFilename的优点就是不需要将结果保存在内存中。

您提到的所有方法所属的xmlWriter API是提供的API之一。另一个值得注意的是tree API。 xmlWriter更像是调用write()来打印到文件,而树更像是在内存中构建嵌套的结构。

如果您的数据是在非线性的情况下构建的,基于后来的信息等添加/更改内容,那么基于树的版本可能会很好。这需要使用流式xmlWriter接口进行一些变通/缓存,因为一旦输出就无法改变。但是,内存中的树可以完全调整,直到它被序列化为止。

树API有一个缺点,它必须保持整个内存;经验法则是解析树的内存要求是序列化xml文件大小的4倍。

我的决定通常取决于我是否希望创建大型文档。如果没有,我使用if api,因为如果我需要它的灵活性。如果我知道效率将成为一个问题,或者我将使用大量的东西,那么流式xmlWriter就是最佳选择。

可以在此处找到

树API示例:http://xmlsoft.org/examples/index.html#Tree

答案 1 :(得分:1)

如果您使用内存有限的设备,则可能不希望使用DOM或基于内存的方法。在这种情况下,您可能希望在迭代要写入XML的数据结构时写出文件。