20
20
# "XML is like violence: if it doesn't solve your problem, you aren't
21
21
# using enough of it." -- various
24
__copyright__ = "Copyright (C) 2005 Canonical Ltd."
25
__author__ = "Martin Pool <mbp@canonical.com>"
28
def ElementTree(*args, **kwargs):
30
if _ElementTree is None:
32
from cElementTree import ElementTree
34
from elementtree.ElementTree import ElementTree
35
_ElementTree = ElementTree
36
return _ElementTree(*args, **kwargs)
39
def Element(*args, **kwargs):
43
from cElementTree import Element
45
from elementtree.ElementTree import Element
47
return _Element(*args, **kwargs)
51
def SubElement(*args, **kwargs):
53
if _SubElement is None:
55
from cElementTree import SubElement
57
from elementtree.ElementTree import SubElement
58
_SubElement = SubElement
59
return _SubElement(*args, **kwargs)
64
raise Exception("XMLMixin.to_element must be overridden in concrete classes")
66
def write_xml(self, f):
67
ElementTree(self.to_element()).write(f, 'utf-8')
71
return cls.from_element(ElementTree().parse(f))
73
read_xml = classmethod(read_xml)
23
# importing this module is fairly slow because it has to load several ElementTree bits
25
from cElementTree import ElementTree, SubElement, Element
27
from elementtree.ElementTree import ElementTree, SubElement, Element
31
"""Write object o to file f as XML.
33
o must provide a to_element method.
35
ElementTree(o.to_element()).write(f, 'utf-8')
39
def unpack_xml(cls, f):
40
return cls.from_element(ElementTree().parse(f))