Source code for pyinthesky.xmlutils
# Expose the "best" ElementTree implementation available.
#
# Got to be careful with what combinations of modules we use here - see:
# http://bugs.python.org/issue20612
try:
from xml.etree import cElementTree as ElementTree
except ImportError:
from xml.etree import ElementTree as ElementTree
from six.moves import cStringIO
import six
[docs]def text_to_etree(content):
# We need the str-type for either Python 2 or 3. We're not expecting py3
# bytes to be passed, so we just need to detect the unicode py2 type and
# turn it into a str-type.
if isinstance(content, six.text_type) and type(content) is not str:
content = content.encode('utf-8')
return ElementTree.parse(cStringIO(content))
[docs]def etree_to_text(etree):
return ElementTree.tostring(etree.getroot())
# May need to implement strip_schema. Look at:
# http://homework.nwsnet.de/releases/45be/
[docs]def nstag(tree, tag):
# If you use the lxml implementation of etree, it's easier to get
# the schema qualifier:
# schema = tree.getroot().nsmap[None]
#
# That would return the schema without the curly braces.
roottag = tree.getroot().tag
if '}' not in roottag:
return tag # No schema.
schema = roottag.split('}', 1)[0] + '}'
return '{0}{1}'.format(schema, tag)
[docs]def simple_elements_dict(node):
d = {}
for attrname, attrvalue in node.items():
d[attrname] = attrvalue
for childnode in list(node):
tagname = childnode.tag
if '}' in tagname:
tagname = tagname.split('}')[-1]
text = childnode.text and childnode.text.strip()
if text is not None:
d[tagname] = text
for attrname, attrvalue in childnode.items():
d[tagname + '.' + attrname] = attrvalue
return d
[docs]def striptag(node):
return node.tag.split('}')[-1]