patrick vrijlandt <patrick.vrijla...@gmail.com> added the comment: Hi,
Did you look at lxml (http://lxml.de)? from lxml.builder import E from lxml import etree tree = etree.ElementTree( E.Hello( "Good morning!", E.World("How do you do", humour = "excellent"), "Fine", E.Goodbye(), ), ) print(etree.tostring(tree, pretty_print=True).decode()) # output, even more prettified <Hello> Good morning! <World humour="excellent"> How do you do </World> Fine <Goodbye/> </Hello> By the way, your Element enhancement is buggy, because all newly create elements will share the same attrib dictionary (if attrib is not given). Notice that Donald Duck will be sad; by the time we print even Hello is sad. import xml.etree.ElementTree as etree class Element(etree.Element): def __init__(self, tag, attrib={}, **extra): super().__init__(tag) self.tag = tag self.attrib = attrib self.attrib.update(extra) self.text = self.attrib.pop('text', None) self.tail = self.attrib.pop('tail', None) self._children = [] if __name__ == '__main__': test = Element('Hello',) test2 = Element('World',{'humour':'excelent'},text = 'How do you do', tail="Fine") test3 = Element('Goodbye', humour='sad') test4 = Element('Donaldduck') test.append(test2) test.append(test3) test.append(test4) tree = etree.ElementTree(test) print(etree.tostring(test, encoding="utf-8", method="xml")) <Hello humour="sad"> <World humour="excelent">How do you do</World>Fine <Goodbye humour="sad" /> <Donaldduck humour="sad" /> </Hello>' The correct idiom would be: def __init__(self, tag, attrib=None, **extra): if attrib is None: attrib = {} super().__init__(tag) Cheers, Patrick 2012/1/16 Pedro Andres Aranda Gutierrez <rep...@bugs.python.org> > > Pedro Andres Aranda Gutierrez <paag...@gmail.com> added the comment: > > Touché :-) > I was just frustrated because my XMLs never have tail or text as > attributes and I wanted to have more compact code... > > On Mon, Jan 16, 2012 at 12:14 PM, patrick vrijlandt > <rep...@bugs.python.org> wrote: > > > > patrick vrijlandt <patrick.vrijla...@gmail.com> added the comment: > > > > I agree the Element syntax is sometimes awkward. > > > > But how would you represent text or tail attributes within this enhanced > element? > > <animal name="cat" tail="yes"> comes to mind ... > > > > ---------- > > nosy: +patrick.vrijlandt > > > > _______________________________________ > > Python tracker <rep...@bugs.python.org> > > <http://bugs.python.org/issue13796> > > _______________________________________ > > ---------- > > _______________________________________ > Python tracker <rep...@bugs.python.org> > <http://bugs.python.org/issue13796> > _______________________________________ > ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue13796> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com