from xml.sax import make_parser from xml.sax.handler import feature_external_ges from xml.dom.pulldom import SAX2DOM from StringIO import StringIO class ContentHandler(SAX2DOM): def skippedEntity(self, name): print 'Skipping', name def parse(s): parser = make_parser() parser.setContentHandler(ContentHandler()) parser.setFeature(feature_external_ges, False) parser.parse(StringIO(s)) # This should print "Skipping baz" and then "Skipping quux". It only prints # the latter, though. print 'First case' parse('''\ &quux; ''') print 'Second case' # This should do the same. Instead, it raises an exception. parse('''\ &quux; ''')