xml - 如何在 Node.js 中转换(简单的)流式 XML?

标签 xml node.js stream

我正在通过我的 Node.js 服务器代理 S3 调用,并希望在代理之前调整几个返回的 XML 值。除了这些调整之外,我想保留每个响应的其余部分,例如响应 header 。

我当然可以先收集整个响应,解析 XML,转换它,然后将其返回,但对于大型响应,这既缓慢又占用大量内存。有没有一种方法可以基本实现 stream.pipe() 但可能带有转换功能?

我看过 sax-js ,它可以管道但没有任何转换能力。我是否必须求助于监听低级解析事件并自己生成和输出生成的 XML?

我也看过 libxmljs 它有一个“推送解析器”和一个更高级别的 DOM API,但看起来我必须再次自己收听低级别的解析事件,而且我不确定我是否可以流式传输生成的 XML 在生成时输出

有没有比这两种方法更简单的方法?谢谢!

附言XML 调整很简单:只需从一些文本元素中删除一个子字符串。

最佳答案

在这种情况下,您可以将所有 block 收集在一起,如下所示:

var data='', tstream = new stream.Transform();
tstream._transform = function (chunk, encoding, done) {
    data += chunk.toString();
    done();
};

然后在最后调用 _flush 函数时执行您需要的操作:

tstream._flush = function(done){
    data += 'hola muheres';
    this.push(data);
    done();
};

所以它看起来像:

req.pipe(anotherstream).pipe(tstream).pipe(response);

关于xml - 如何在 Node.js 中转换(简单的)流式 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12793257/

相关文章:

c++ - std::streampos、std::streamoff 和 std::streamsize 到 long long int?

stream - 如何在 Sinatra 中流式传输图像对象

javascript - 链接显然无法正常工作

xml - 选择与字符串变量名称匹配的节点集(属性或元素)

node.js - 无法通过 electron-builder 自定义 NSIS 包含脚本注册和注销 .dll 文件

node.js - mongodb dup key错误11000导致 Node 服务器崩溃

java - DataOutputStream 在内部保存整个缓冲区?

xml - 使用 XSL 将 2 个 XML 文件合并为 1 个

javascript - 我似乎无法在 JS 中正确解析 XML 数据

mysql - 如何获取 MYSQL 中另一个表中的项目数组及其关联值的列表?