4 from __future__ import with_statement
7 def flatten(elem, includeTail = False):
9 Recursively extract text content.
11 @note To get rid of all subelements to a given element, and keep just the text, you can do:
12 elem.text = flatten(elem); del elem[:]
14 text = elem.text or ""
17 if includeTail and e.tail:
22 def append(elem, item):
24 Universal append to an Element
25 @param elem ElementTree.Element
26 @param item Either None, Str/Unicode, or ElementTree.Element
31 if isinstance(item, basestring):
33 elem[-1].tail = (elem[-1].tail or "") + item
35 elem.text = (elem.text or "") + item
40 def indent(elem, level=0, indentation=" "):
42 Add indentation to the data of in an ElementTree
44 >>> from xml.etree import ElementTree
45 >>> xmlRoot = ElementTree.fromstring("<xml><tree><bird /></tree></xml>")
47 >>> ElementTree.dump(xmlRoot)
55 i = "\n" + level*indentation
57 if not elem.text or not elem.text.strip():
58 elem.text = i + indentation
60 indent(e, level+1, indentation)
61 if not e.tail or not e.tail.strip():
62 e.tail = i + indentation
63 if not e.tail or not e.tail.strip():
66 if level and (not elem.tail or not elem.tail.strip()):
70 if __name__ == "__main__":
72 from xml.etree import ElementTree
73 if len(sys.argv) == 3:
74 xml = ElementTree.parse(sys.argv[1])
76 with open(sys.argv[2], "w") as source:
78 elif len(sys.argv) == 1:
79 xml = ElementTree.parse(sys.stdin)