root/effbotlib/ElementTree.py
| Revision 438 (by effbot, 11/13/06 13:21:35) |
|---|
# could I have some elementtree, please? try: from xml.etree.cElementTree import * except ImportError: try: from cElementTree import * except ImportError: from elementtree.ElementTree import * # utilities def gettext(elem): text = elem.text or "" for e in elem: text += gettext(e) if e.tail: text += e.tail return text def indent(elem, level=0): i = "\n" + level*" " if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + " " for e in elem: indent(e, level+1) if not e.tail or not e.tail.strip(): e.tail = i if level and (not elem.tail or not elem.tail.strip()): elem.tail = i try: from functools import partial except ImportError: # fake it for pre-2.5 releases def partial(func, tag): return lambda *args, **kwargs: func(tag, *args, **kwargs) class _E(object): def __call__(self, tag, *children, **attrib): elem = Element(tag, attrib) for item in children: if isinstance(item, dict): elem.attrib.update(item) elif isinstance(item, basestring): if len(elem): elem[-1].tail = (elem[-1].tail or "") + item else: elem.text = (elem.text or "") + item elif iselement(item): elem.append(item) else: raise TypeError("bad argument: %r" % item) return elem def __getattr__(self, tag): return partial(self, tag) # create factory object E = _E() if __name__ == "__main__": # sanity print tostring(E.tag())
Note: See TracBrowser for help on using the browser.
