0001"""ElementTree extensions."""
0002
0003__revision__ = "$Rev$"
0004__date__ = "$Date: 2005-02-16 15:43:38 -0500 (Wed, 16 Feb 2005) $"
0005__author__ = "Ryan Tomayko (rtomayko@gmail.com)"
0006__copyright__ = "Copyright 2004-2005, Ryan Tomayko"
0007__license__ = "MIT <http://www.opensource.org/licenses/mit-license.php>"
0008
0009import os
0010
0011
0012
0013try:
0014 if os.environ.get('KID_NOCET'):
0015 raise ImportError
0016 else:
0017 try:
0018 if os.environ.get('KID_NOET'):
0019 raise ImportError
0020 else:
0021 import cElementTree as CET
0022 from cElementTree import *
0023 except ImportError:
0024
0025 import xml.etree.cElementTree as CET
0026 from xml.etree.cElementTree import *
0027except:
0028 CET = None
0029
0030
0031
0032try:
0033 if os.environ.get('KID_NOET'):
0034 raise ImportError
0035 else:
0036 import elementtree.ElementTree as ET
0037 if not CET:
0038 from elementtree.ElementTree import *
0039except ImportError:
0040
0041 import xml.etree.ElementTree as ET
0042 if not CET:
0043 from xml.etree.ElementTree import *
0044
0045
0046
0047encode_entity = ET._encode_entity
0048raise_serialization_error = ET._raise_serialization_error
0049
0050def Comment(text=None):
0051 elem = Element(Comment)
0052 elem.text = text
0053 return elem
0054
0055def ProcessingInstruction(target, text=None):
0056 element = Element(ProcessingInstruction)
0057 element.text = target
0058 if text:
0059 element.text = element.text + " " + text
0060 return element
0061
0062
0063
0064def Fragment(text=''):
0065 """XML fragment factory.
0066
0067 Fragments hold TEXT and children but do not have a tag or attributes.
0068
0069 """
0070 elem = Element(Fragment)
0071 elem.text = text
0072 return elem
0073
0074def namespaces(elem, remove=0):
0075 """Get the namespace declarations for an Element.
0076
0077 This function looks for attributes on the Element provided that have the
0078 following characteristics:
0079
0080 * Begin with 'xmlns:' and have no namespace URI.
0081 * Are named 'xmlns' and have no namespace URI.
0082
0083 The result is a dictionary containing namespace prefix -> URI mappings.
0084 Default namespace attributes result in a key of ''.
0085
0086 If remove is truthful, namespace declaration attributes are removed
0087 from the passed in Element.
0088
0089 """
0090 names = {}
0091 for k in elem.keys():
0092 if k.startswith('xmlns:'):
0093 names[k[6:]] = elem.get(k)
0094 if remove: del elem.attrib[k]
0095 elif k == 'xmlns':
0096 names[''] = elem.get(k)
0097 if remove: del elem.attrib[k]
0098 return names
0099
0100__all__ = ['Element', 'SubElement', 'Comment', 'ProcessingInstruction',
0101 'Fragment', 'ElementTree', 'QName', 'dump',
0102 'parse', 'tostring', 'namespaces',
0103 'encode_entity', 'raise_serialization_error']