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

Reply via email to