-1
现在,我的代码从包含多个文档的XML文件创建一个流,并将其合并到一个XML文档中。然后它将该字符串传递给XML解析器,该解析器允许我从XML流中检索数据。我想通过分离创建xml流的逻辑和xml解析器的逻辑来模块化我的应用程序。下面是我的代码:将解析逻辑拆分为单独的文件Node.js
var fs = require('fs');
var path = require('path');
var split = require("split");
var util = require("util");
var Transform = require("stream").Transform;
var XmlStream = require('xml-stream');
var parseXml;
// Create a file stream and pass it to XmlStream
var streamXmlFile = fs.createReadStream(path.join(__dirname, 'ipg140107.xml'));
util.inherits(CombineXmlDocs, Transform);
function CombineXmlDocs() {
Transform.call(this, { "objectMode": true });
this.currLine = 0;
}
CombineXmlDocs.prototype._transform = function (line, encoding, processed) {
this.currLine++;
if (this.currLine === 3) {
this.push('<week-of-patents>\n');
}
if (this.currLine < 3 || (line.indexOf('<?xml') === -1 && line.indexOf('<!DOCTYPE') === -1)) { // handle first line
this.push(line + '\n');
}
processed(); // we're done processing the current line
};
CombineXmlDocs.prototype._flush = function(cb) {
cb();
};
// streamXmlFile.pipe(split()).pipe(new CombineXmlDocs()).pipe(process.stdout);
parseXml = new XmlStream(streamXmlFile.pipe(split()).pipe(new CombineXmlDocs()));
// parseXml = new XmlStream(streamXmlFile);
parseXml.on('endElement: date', function(date) {
console.log(date.$text);
});