Nodejs: parsing XML, editing values, saving the end result using sax-js module

What I'd like to achieve is:

  • parsing a chunk of XML
  • editing some values
  • saving the end result in a new xml file

The module is sax-js: https://github.com/isaacs/sax-js#readme

The module has some built-in mechanism to read/write any.

I thought the task would be a piece of cake; on the contrary I have been struggling with it for the whole day.

Here is my code:

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

I did think that updating some content (see the comment above) would suffice to write the updated stream into a new file.

What's wrong with this code?

Thanks for your help,

Roland

The sax module doesn't let you modify nodes like that. If you take a look at this bit of code, you'll see that the input is passed indiscriminately to the output.

All hope is not, however, lost! Check out the pretty-print example - it would be a good starting point for what you want to do. You'd have to do a bit of work to implement the readable part of the stream, though, if you still want to be able to .pipe() out of it.

Based on deoxxa's answer I wrote an NPM module for this https://www.npmjs.com/package/sax-streamer