diff --git a/dom-parser.js b/dom-parser.js index 95d8667..d758a92 100644 --- a/dom-parser.js +++ b/dom-parser.js @@ -88,12 +88,6 @@ DOMHandler.prototype = { this.document.documentURI = this.locator.systemId; } }, - allText:function(source) { - var doc = this.document; - var el = doc.createTextNode(source); - appendElement(this, el); - this.currentElement = el; - }, startElement:function(namespaceURI, localName, qName, attrs) { var doc = this.document; var el = doc.createElementNS(namespaceURI, qName||localName); diff --git a/readme.md b/readme.md index 5ce0e81..f832c44 100644 --- a/readme.md +++ b/readme.md @@ -42,10 +42,16 @@ API Reference //errorHandler is supported new DOMParser({ /** - * youcan override the errorHandler for xml parser + * locator is always need for error position info + */ + locator:{}, + /** + * you can override the errorHandler for xml parser * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html */ - errorHandler:{warning:callback,error:callback,fatalError:callback} + errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback} + //only callback model + //errorHandler:function(level,msg){console.log(level,msg)} }) ``` diff --git a/sax.js b/sax.js index 92f1975..658cd3e 100644 --- a/sax.js +++ b/sax.js @@ -82,6 +82,15 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ var start = 0; while(true){ var i = source.indexOf('<',start); + if(i<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.document; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } if(i>start){ appendText(i); } @@ -113,46 +122,41 @@ function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ end = parseDCC(source,i,domBuilder,errorHandler); break; default: - if(i<0){ - if(!source.substr(start).match(/^\s*$/)){ - domBuilder.allText(source); - } - return; - }else{ - try{ - locator&&position(i); - var el = new ElementAttributes(); - //elStartEnd - var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler); - var len = el.length; - //position fixed - if(len && locator){ - var backup = copyLocator(locator,{}); - for(var i = 0;i': switch(s){ case S_TAG: @@ -449,8 +456,12 @@ function parseDCC(source,start,domBuilder,errorHandler){//sure start with '',start+4); if(end === -1) errorHandler.fatalError("Unclosed comment"); //append comment source.substring(4,end)//