当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我通过我的Node.js服务器代理一个S3调用,并希望在代理它们之前调整几个返回的 XML值.除了那些调整,我想保留每个响应的其余部分,例如响应标头. 我当然可以首先收集整个响应,解析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);
网友评论