2

我想要实现的是:

  • 解析一大块 XML
  • 编辑一些值
  • 将最终结果保存在新的 xml 文件中

模块是sax-js:https ://github.com/isaacs/sax-js#readme

该模块具有一些内置机制来读取/写入任何内容。

我认为这项任务将是小菜一碟;相反,我整天都在为此苦苦挣扎。

这是我的代码:

var fs = require('fs');
var saxStream = require("sax").createStream(true);

saxStream.on("text", function (node) {
    if (node === 'foo') { //the content I want to update
    node = 'blabla';    
  }
});
fs.createReadStream("mysongs.xml")
  .pipe(saxStream)
  .pipe(fs.createWriteStream("mysongs-copy.xml"));

我确实认为更新一些内容(见上面的评论)足以将更新的流写入一个新文件。

这段代码有什么问题?

谢谢你的帮助,

罗兰

4

3 回答 3

1

sax模块不允许您这样修改节点。如果您看一下这段代码,您会发现输入被不加选择地传递到输出。

然而,所有的希望都不会落空!查看漂亮打印的示例- 这将是您想要做的一个很好的起点。但是,如果您仍然希望能够.pipe()摆脱它,您必须做一些工作来实现流的可读部分。

于 2013-05-25T05:19:01.920 回答
1

如果您了解 XML 的一般结构,可以尝试 xml-flow。它将 XML 流转换为对象,但具有将它们转换回 xml 字符串的实用程序: https ://github.com/matthewmatician/xml-flow

于 2015-09-09T22:16:24.377 回答
0

根据 deoxxa 的回答,我为此https://www.npmjs.com/package/sax-streamer编写了一个 NPM 模块

于 2015-06-06T08:03:22.440 回答