xml2jsはルート・ノードがらみが慣れないとよくわからない感じ。例えば普通にRSS 2.0のXMLを吐こうとすると、XMLへ変換するオブジェクトの方で属性を指定し、ルート・ノードの名前やXMLプロログはビルダー関数で指定する。と、コードが分断される。

var xml2js = require('xml2js');
var rss = {
  $: {
    version: '2.0',
    'xml:lang': 'ja-JP',
    'xmlns:atom': 'http://www.w3.org/2005/Atom'
  }
};
var processed = new xml2js.Builder({
  rootName: 'rss',
  xmldec: {
    encoding: 'UTF-8'
  }
}).buildObject(rss);

これでようやくよく見るRSS 2.0のフィードのXMLらしく吐ける。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xml:lang="ja-JP"
  xmlns:atom="http://www.w3.org/2005/Atom"></rss>

xml2jsはXMLをパースするにはなかなか便利だけど、出力には向いていないなと感じた。XMLを扱うNode.jsパッケージはこれ! といったのがなかなかないなぁ。