diff --git a/src/mio/parser.py b/src/mio/parser.py index b71d07d9ec849b325af86ab80d860c022811c3bc..111b8c31da0fd9cd5dba8f9a4e929437184f347b 100755 --- a/src/mio/parser.py +++ b/src/mio/parser.py @@ -2,7 +2,7 @@ import os import stat import sys import time -import xml.sax +import xml.parsers.expat import traceback import urlparse import urllib2 @@ -451,7 +451,7 @@ class Comment: def __repr__(self): return self._xml() -class Parser(xml.sax.ContentHandler): +class Parser: def __init__(self, url, include_comments=False): """Parse the given url inti .tree @@ -463,31 +463,30 @@ class Parser(xml.sax.ContentHandler): self.tree = None # Create a xml parser - import xml.parsers.expat self.parser = xml.parsers.expat.ParserCreate() self.parser.StartElementHandler = self.startElement self.parser.EndElementHandler = self.endElement self.parser.CharacterDataHandler = self.characters self.parser.CommentHandler = self.comment - """parser = xml.sax.make_parser() - parser.setFeature(xml.sax.handler.feature_namespaces, 0) - parser.setContentHandler(self) - try: - parser.setFeature(xml.sax.handler.feature_external_ges, 0) - except: - pass - """ # Parse the url self.current = [ self ] (scheme, host, path, param, query, frag) = urlparse.urlparse(url) - if not scheme: - self.parser.Parse(open(url).read()) + try: + if not scheme: + self.parser.Parse(open(url).read()) + pass + else: + self.parser.Parse(urllib2.urlopen(url).read()) + pass pass - else: - self.parser.Parse(urllib2.urlopen(url).read()) + except xml.parsers.expat.ExpatError: + reason = xml.parsers.expat.ErrorString(self.parser.ErrorCode) + line = self.parser.ErrorLineNumber + column = self.parser.ErrorColumnNumber + raise Exception("%s at line %d, column %d in %s" % + (reason, line, column, url)) pass - # Set the mtime mtime = 0 try: