diff --git a/lib/deserializer.js b/lib/deserializer.js index 819356a..b463123 100644 --- a/lib/deserializer.js +++ b/lib/deserializer.js @@ -1,4 +1,4 @@ -var sax = require('sax') +var expat = require('node-expat') , dateFormatter = require('./date_formatter') var Deserializer = function(encoding) { @@ -13,9 +13,13 @@ var Deserializer = function(encoding) { this.callback = null this.error = null - this.parser = sax.createStream() - this.parser.on('opentag', this.onOpentag.bind(this)) - this.parser.on('closetag', this.onClosetag.bind(this)) + this.parser = new expat.Parser( + this.encoding === 'utf8' ? + 'utf-8' : + this.encoding + ) + this.parser.on('startElement', this.onOpentag.bind(this)) + this.parser.on('endElement', this.onClosetag.bind(this)) this.parser.on('text', this.onText.bind(this)) this.parser.on('cdata', this.onCDATA.bind(this)) this.parser.on('end', this.onDone.bind(this)) @@ -123,12 +127,14 @@ Deserializer.prototype.push = function(value) { // SAX Handlers //============================================================================== -Deserializer.prototype.onOpentag = function(node) { - if (node.name === 'ARRAY' || node.name === 'STRUCT') { +Deserializer.prototype.onOpentag = function(name) { + name = name.toUpperCase() + + if (name === 'ARRAY' || name === 'STRUCT') { this.marks.push(this.stack.length) } this.data = [] - this.value = (node.name === 'VALUE') + this.value = (name === 'VALUE') } Deserializer.prototype.onText = function(text) { @@ -142,7 +148,7 @@ Deserializer.prototype.onCDATA = function(cdata) { Deserializer.prototype.onClosetag = function(el) { var data = this.data.join('') try { - switch(el) { + switch(el.toUpperCase()) { case 'BOOLEAN': this.endBoolean(data) break diff --git a/package.json b/package.json index bea1d64..d3588a3 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,41 @@ -{ "name" : "xmlrpc" -, "description" : "A pure JavaScript XML-RPC client and server." -, "keywords" : [ "xml-rpc", "xmlrpc", "xml", "rpc" ] -, "version" : "1.3.1" -, "preferGlobal" : false -, "homepage" : "https://github.com/baalexander/node-xmlrpc" -, "author" : "Brandon Alexander (https://github.com/baalexander)" -, "repository" : { - "type" : "git" - , "url" : "git://github.com/baalexander/node-xmlrpc.git" - } -, "bugs" : { - "url" : "https://github.com/baalexander/node-xmlrpc/issues" - } -, "directories" : { - "lib" : "./lib" - } -, "main" : "./lib/xmlrpc.js" -, "dependencies" : { - "sax" : "0.6.x" - , "xmlbuilder" : "2.6.x" - } -, "devDependencies" : { - "vows" : "0.7.x" - } -, "scripts" : { - "test" : "vows 'test/*.js'" - } -, "engines" : { - "node" : ">=0.8", - "npm" : ">=1.0.0" - } -, "license" : "MIT" +{ + "name": "xmlrpc", + "description": "A pure JavaScript XML-RPC client and server.", + "keywords": [ + "xml-rpc", + "xmlrpc", + "xml", + "rpc" + ], + "version": "1.3.1", + "preferGlobal": false, + "homepage": "https://github.com/baalexander/node-xmlrpc", + "author": "Brandon Alexander (https://github.com/baalexander)", + "repository": { + "type": "git", + "url": "git://github.com/baalexander/node-xmlrpc.git" + }, + "bugs": { + "url": "https://github.com/baalexander/node-xmlrpc/issues" + }, + "directories": { + "lib": "./lib" + }, + "main": "./lib/xmlrpc.js", + "dependencies": { + "node-expat": ">=2.3.8 <3.0.0", + "xmlbuilder": "2.6.x" + }, + "devDependencies": { + "vows": "0.7.x" + }, + "scripts": { + "test": "make test" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.0.0" + }, + "license": "MIT" }