On 02/11/2021 12:55, Robin Becker wrote:
I'm having a problem using lxml.etree to make a treebuilding parser that validates; I have test code where invalid xml is detected and an error raised when the line below target=ET.TreeBuilder(), is commented out.

.........

I managed to overcome this problem by utilizing the non-targeted parser with returns an _ElementTree object. I can then convert to tuple tree using code like this

class TT:
        def __init__(self):
                pass

        def __call__(self,tree):
                if not tree: return
                return self.maketuple(next(tree.iter()))

        def maketuple(self,e):
                return (e.tag,e.attrib or None,self.content(e),e.sourceline)

        def content(self,e):
                t = e.text
                kids = e.getchildren()
                if len(kids)==0 and t is None:
                        return t
                else:
                        r = [].append
                        if t is not None: r(t)
                        for c in kids:
                                r(self.maketuple(c))
                                t = c.tail
                                if t is not None:
                                        r(t)
                        return r.__self__


--
Robin Becker
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to