Martin Hosken <martin_hos...@sil.org> added the comment:
Blast. Bugs. Sorry. Missing superclass init call in CommentingTb. I enclose the whole thing again to save editing. Also fixes comment output to give text. from __future__ import print_function import sys import xml.etree.ElementTree as et import xml.etree.cElementTree as cet from io import StringIO teststr = u"""<?xml version="1"?> <root> <child> Hello <!-- Greeting --> World </child> </root>""" testf = StringIO(teststr) if len(sys.argv) >= 2 and 'a' in sys.argv[1]: testf.seek(0) for event, elem in et.iterparse(testf, events=["end", "comment"]): if event == 'end': print(elem.tag + ": " + str(elem.text)) elif event == 'comment': print("comment: " + elem.text) if len(sys.argv) < 2 or 'b' in sys.argv[1]: testf.seek(0) def doComment(data): parser.parser.StartElementHandler("!--", ('text', data)) parser.parser.EndElementHandler("!--") parser = et.XMLParser() parser.parser.CommentHandler = doComment for event, elem in et.iterparse(testf, parser=parser): if elem.tag == "!--": print(elem.tag + ": " + elem.get('text', "")) else: print(elem.tag + ": " + str(elem.text)) if len(sys.argv) < 2 or 'c' in sys.argv[1] or 'd' in sys.argv[1]: testf.seek(0) useet = et if len(sys.argv) < 2 or 'c' in sys.argv[1] else cet class CommentingTb(useet.TreeBuilder): def __init__(self): useet.TreeBuilder.__init__(self) self.parser = None def comment(self, data): self.parser.parser.StartElementHandler("!--", ('text', data)) self.parser.parser.EndElementHandler("!--") tb = CommentingTb() parser = useet.XMLParser(target=tb) tb.parser = parser kw = {'parser': parser} if len(sys.argv) < 2 or 'c' in sys.argv[1] else {} for event, elem in useet.iterparse(testf, **kw): if elem.tag == "!--": print(elem.tag + ": " + elem.get('text', "")) else: print(elem.tag + ": " + str(elem.text)) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34600> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com