|
|
@ -245,13 +245,20 @@ try: |
|
|
|
except ImportError: # Python 2.6 |
|
|
|
from xml.parsers.expat import ExpatError as compat_xml_parse_error |
|
|
|
|
|
|
|
|
|
|
|
etree = xml.etree.ElementTree |
|
|
|
|
|
|
|
|
|
|
|
class _TreeBuilder(etree.TreeBuilder): |
|
|
|
def doctype(self, name, pubid, system): |
|
|
|
pass |
|
|
|
|
|
|
|
if sys.version_info[0] >= 3: |
|
|
|
compat_etree_fromstring = xml.etree.ElementTree.fromstring |
|
|
|
def compat_etree_fromstring(text): |
|
|
|
return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder())) |
|
|
|
else: |
|
|
|
# python 2.x tries to encode unicode strings with ascii (see the |
|
|
|
# XMLParser._fixtext method) |
|
|
|
etree = xml.etree.ElementTree |
|
|
|
|
|
|
|
try: |
|
|
|
_etree_iter = etree.Element.iter |
|
|
|
except AttributeError: # Python <=2.6 |
|
|
@ -265,7 +272,7 @@ else: |
|
|
|
# 2.7 source |
|
|
|
def _XML(text, parser=None): |
|
|
|
if not parser: |
|
|
|
parser = etree.XMLParser(target=etree.TreeBuilder()) |
|
|
|
parser = etree.XMLParser(target=_TreeBuilder()) |
|
|
|
parser.feed(text) |
|
|
|
return parser.close() |
|
|
|
|
|
|
@ -277,7 +284,7 @@ else: |
|
|
|
return el |
|
|
|
|
|
|
|
def compat_etree_fromstring(text): |
|
|
|
doc = _XML(text, parser=etree.XMLParser(target=etree.TreeBuilder(element_factory=_element_factory))) |
|
|
|
doc = _XML(text, parser=etree.XMLParser(target=_TreeBuilder(element_factory=_element_factory))) |
|
|
|
for el in _etree_iter(doc): |
|
|
|
if el.text is not None and isinstance(el.text, bytes): |
|
|
|
el.text = el.text.decode('utf-8') |
|
|
|