Javascript 将解析逻辑拆分为单独的文件Node.js

Javascript 将解析逻辑拆分为单独的文件Node.js,javascript,xml,node.js,Javascript,Xml,Node.js,现在,我的代码从一个包含多个文档的XML文件创建一个XML流,并将其转换为一个XML文档。然后它将该字符串传递给XML解析器,该解析器允许我从XML流中检索数据。我想通过分离创建xml流的逻辑和xml解析器的逻辑来模块化我的应用程序。这是我的密码: var fs = require('fs'); var path = require('path'); var split = require("split"); var util = require("util"); var Transform =

现在,我的代码从一个包含多个文档的XML文件创建一个XML流,并将其转换为一个XML文档。然后它将该字符串传递给XML解析器,该解析器允许我从XML流中检索数据。我想通过分离创建xml流的逻辑和xml解析器的逻辑来模块化我的应用程序。这是我的密码:

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);
});
var fs=require('fs');
var path=require('path');
var分割=要求(“分割”);
var util=需要(“util”);
var转换=要求(“流”)。转换;
var XmlStream=require('xml-stream');
var-parseXml;
//创建文件流并将其传递给XmlStream
var streamXmlFile=fs.createReadStream(path.join(uu dirname,'ipg140107.xml');
util.inherits(CombineXmlDocs,Transform);
函数CombineXmlDocs(){
调用(这个,{“objectMode”:true});
这条线=0;
}
CombineXmlDocs.prototype.\u transform=函数(行、编码、处理){
这个.currLine++;
如果(this.currLine==3){
这个.push('\n');
}

如果(this.currLine<3 | | |(line.indexOf)(“我通过创建一个连接xml文档的流并导出一个流来实现这一点。然后在我的app.js中需要该文件,并使用导出的流传递给我的xml解析器

app.js代码:

var createParsableXml = require('./createParsableXml.js');
var XmlParserStream = require('xml-stream');
var parseXml;

// create a parsable xml stream using xml-stream node.js module
parseXml = new XmlParserStream(createParsableXml.streamConcatXml);

parseXml.on('endElement: date', function(date) {
  console.log(date.$text);
});
createParsableXml.js代码:

var fs = require('fs');
var path = require('path');

// allows for stream parsing on a line by line basis
var split = require('split');

var util = require('util');
var Transform = require('stream').Transform;
var streamXmlFile = fs.createReadStream(path.join(__dirname, 'ipg140107.xml'));


util.inherits(CombineXmlDocs, Transform);
function CombineXmlDocs () {
    Transform.call(this, { "objectMode": true });
    this.currLine = 0;
}

// logic for parsing concatenated uspto xml docs into one xml doc
CombineXmlDocs.prototype._transform = function (line, encoding, processed) {
    // removes xml and doctype declarations except for the first instance, adds root element to doc
    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();
};

exports.streamConcatXml = streamXmlFile.pipe(split()).pipe(new CombineXmlDocs());
var fs=require('fs');
var path=require('path');
//允许逐行分析流
var split=需要(“拆分”);
var util=require('util');
var Transform=require('stream')。Transform;
var streamXmlFile=fs.createReadStream(path.join(uu dirname,'ipg140107.xml');
util.inherits(CombineXmlDocs,Transform);
函数CombineXmlDocs(){
调用(这个,{“objectMode”:true});
这条线=0;
}
//将连接的uspto xml文档解析为一个xml文档的逻辑
CombineXmlDocs.prototype.\u transform=函数(行、编码、处理){
//删除除第一个实例之外的xml和doctype声明,将根元素添加到文档
这个.currLine++;
如果(this.currLine==3){
这个.push('\n');
}
如果(this.currLine<3 | |(line.indexOf('