【发布时间】:2018-03-02 18:57:07
【问题描述】:
我必须通过组合和处理每个大约 100MB 的多个 xml 来生成单个 xml 文件。我找不到任何可以流式写入 xml 的 node.js 库。
我试过下面的库
- xml 编写器
- xmlbuilder
- genx
所有这些库都将xml存储在内存中,这会导致内存不足的异常。
您对不在内存中存储完整对象的适当库有任何建议。
其中一个库(xml-writer)的示例代码
var fs = require('fs');
var XMLWriter = require('xml-writer');
var writeStream = fs.createWriteStream("myfile",{
encoding: 'utf-8'
});
var xw = new XMLWriter(false);
xw.startDocument('1.0', 'UTF-8').startElement(function() {
return 'root';
});
for(var i = 0 ; i < 10000000; i++ ) {
xw.startElement(function() {
return 'root1';
}).text(function() {
return 'Some content1';
});
xw.endElement();
}
xw.endElement();
writeStream.write(xw.toString());
writeStream.end();
这是在文件中添加两个元素的简单代码。但这给了我内存不足的异常。因为它是创建一个对象,然后将完整的对象存储在内存中并立即将其写入文件中。
我在谷歌上搜索了很多,但找不到任何将 xml 数据流式写入文件的库。
谢谢,
【问题讨论】:
-
您使用的是非流式 xml 生成器。试试 xml-stream 和 scramjet。两者一起会逐行输出xml。
-
@MichałCzapracki - 但 xml-stream 不是 xml 生成器。我可以使用它来解析 xml,但我还需要对它们进行一些转换,为此我试图使用上述库。如果我使用你提到的组合,我将不得不手动编写 xml 标签。
-
我明白了,所以你想要类似于那些 json 到 xml 生成器的东西......我不确定现在是否有类似的东西,但它可以很容易地编写。我明天可以尝试寻找一些东西,如果我做对了,请告诉我。
标签: javascript node.js xml