在 C 中创建和流式传输大型 XML 文档

在 C 中创建和流式传输大型 XML 文档

create and stream large XML document in C++

我有一些代码可以创建一个相当大的 xml DOM 并将其写入一个文件(最大 50-100MB)。它基本上创建了 DOM,然后在其上调用 toString 并使用 ofstream 将其写出。有没有办法获得生成的dom的流输出,这样它就不会一次在内存中创建整个结构然后复制它等等?创建节点后,我不会修改任何节点,以便它可以将其写出并立即释放内存。我可以编写自己的 xml 类来构建 xml,但是......我认为这不是一个好主意,因为当涉及到转义等时我可能会错过一些东西。


好的,原来 libxml2 有一个流式 API:

http://xmlsoft.org/examples/testWriter.c

这是一种有点旧的风格(非常 C-ish),但你可以围绕它编写你的package器。


我会推荐 GenX 作为流式 XML 编写器,我在 Programmer's Notepad 中使用它,它很有效,您可以在源代码中查看使用示例。速度极快,并且可以生成良好的 UTF-8 XML。使用时的内存使用量应大致保持不变。


生成有效的 XML 真的没有什么大不了的。您担心的转义是微不足道的。

这里有一个用于流式编写 XML 的库:https://code.google.com/p/xml-writer-cpp/ — 如果没有别的,它对教育目的很有用。


在关键字"C XML writer;"下查找XML 编写器将 XML 生成到文件中,而无需在内存中构建整个 DOM,因此他们根本不需要使用太多内存。您没有提到平台,但 Microsoft XmlLite 有 IXmlWriter。


推荐阅读

    改文件linux命令行?

    改文件linux命令行?,地址,系统,工作,信息,数字,文件,命令,设备,密码,权限,lin

    拷贝文件夹linux命令?

    拷贝文件夹linux命令?,系统,地址,服务,信息,密码,情况,单位,项目,命令,文件,l

    用linux命令输出id?

    用linux命令输出id?,系统,设备,工作,信息,地址,命令,工具,基础,目录,进程,lin

    打包文件命令linux?

    打包文件命令linux?,系统,时间,工具,名称,命令,文件,目录,格式,表示,详细信

    linux中文件编辑命令?

    linux中文件编辑命令?,系统,工作,工具,信息,地址,发行,命令,第一,检测,基础,l

    linux文件格式的命令?

    linux文件格式的命令?,设备,命令,系统,文件,标准,代码,情况,电脑,平台,数据,l

    linux命令行编译文件?

    linux命令行编译文件?,代码,系统,项目,工具,网上,手机,电脑,地址,官网,文件,L

    linux下文件写入命令?

    linux下文件写入命令?,系统,信息,文件,名字,电脑,软件,目录,命令,内容,指令,l

    linux命令备份文件夹?

    linux命令备份文件夹?,设备,系统,文件,命令,备份,情况,做好,名字,灵活,数据,l

    linux命令deb文件?

    linux命令deb文件?,软件,位置,第一,系统,中心,工具,信息,发行,网站,管理系统

    linux文件类基本命令?

    linux文件类基本命令?,系统,设备,工具,工作,基础,命令,文件,发行,管理,网络,L

    linux建个文件夹命令?

    linux建个文件夹命令?,系统,名字,命令,文件,文件夹,环境,不了,名称,数据,密

    linux命令添加文件?

    linux命令添加文件?,工作,简介,数据,系统,文件,命令,操作,文件名,内容,终端,l

    linux文件输入命令?

    linux文件输入命令?,工作,系统,地址,信息,工具,位置,命令,设备,发行,首开,lin

    文件备份命令linux?

    文件备份命令linux?,网站,系统,设备,文件,软件,网络,工具,环境,数据,地址,lin

    linux遍历文件命令?

    linux遍历文件命令?,系统,数据,工具,文件,平台,信息,百度,位置,时间,适当,lin

    linux命令查看小文件?

    linux命令查看小文件?,系统,档案,文件夹,标准,软件,单位,文件,命令,大小,内

    linux文件中剪切命令?

    linux文件中剪切命令?,位置,系统,工作,命令,发行,连续,标准,终端,文件,目录,l

    linux存储文件命令?

    linux存储文件命令?,系统,地址,工作,命令,软件,电脑,标准,底部,信息,文件,lin

    linux保存命令文件?

    linux保存命令文件?,系统,状态,命令,文件,第一,管理,电脑,模式,编辑,终端,lin