Martin Hosken <[email protected]> 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 <[email protected]>
<https://bugs.python.org/issue34600>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com