var util = require('util'); var sax = require('sax'); var TreeBuilder = require('./../treebuilder').TreeBuilder; function XMLParser(target) { this.parser = sax.parser(true); this.target = (target) ? target : new TreeBuilder(); this.parser.onopentag = this._handleOpenTag.bind(this); this.parser.ontext = this._handleText.bind(this); this.parser.oncdata = this._handleCdata.bind(this); this.parser.ondoctype = this._handleDoctype.bind(this); this.parser.oncomment = this._handleComment.bind(this); this.parser.onclosetag = this._handleCloseTag.bind(this); this.parser.onerror = this._handleError.bind(this); } XMLParser.prototype._handleOpenTag = function(tag) { this.target.start(tag.name, tag.attributes); }; XMLParser.prototype._handleText = function(text) { this.target.data(text); }; XMLParser.prototype._handleCdata = function(text) { this.target.data(text); }; XMLParser.prototype._handleDoctype = function(text) { }; XMLParser.prototype._handleComment = function(comment) { }; XMLParser.prototype._handleCloseTag = function(tag) { this.target.end(tag); }; XMLParser.prototype._handleError = function(err) { throw err; }; XMLParser.prototype.feed = function(chunk) { this.parser.write(chunk); }; XMLParser.prototype.close = function() { this.parser.close(); return this.target.close(); }; exports.XMLParser = XMLParser;