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



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

当然,我可以先收集整个响应,解析XML,转换它,然后返回,但对于大的响应,这将是缓慢和内存密集的。有没有一种方法可以基本上实现stream.pipe(),但可能使用转换函数?

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

我还研究了libxmljs;推送解析器";和更高级别的DOM API,但看起来我必须再次亲自收听低级别的解析事件,而且我不确定我是否可以在生成结果XML时将其流式输出。

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

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

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

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);

最新更新