|  | @@ -1458,6 +1458,12 @@ def urlencode_postdata(*args, **kargs):
 | 
	
		
			
				|  |  |      return compat_urllib_parse.urlencode(*args, **kargs).encode('ascii')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +try:
 | 
	
		
			
				|  |  | +    etree_iter = xml.etree.ElementTree.Element.iter
 | 
	
		
			
				|  |  | +except AttributeError:  # Python <=2.6
 | 
	
		
			
				|  |  | +    etree_iter = lambda n: n.findall('.//*')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def parse_xml(s):
 | 
	
		
			
				|  |  |      class TreeBuilder(xml.etree.ElementTree.TreeBuilder):
 | 
	
		
			
				|  |  |          def doctype(self, name, pubid, system):
 | 
	
	
		
			
				|  | @@ -1465,7 +1471,14 @@ def parse_xml(s):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      parser = xml.etree.ElementTree.XMLParser(target=TreeBuilder())
 | 
	
		
			
				|  |  |      kwargs = {'parser': parser} if sys.version_info >= (2, 7) else {}
 | 
	
		
			
				|  |  | -    return xml.etree.ElementTree.XML(s.encode('utf-8'), **kwargs)
 | 
	
		
			
				|  |  | +    tree = xml.etree.ElementTree.XML(s.encode('utf-8'), **kwargs)
 | 
	
		
			
				|  |  | +    # Fix up XML parser in Python 2.x
 | 
	
		
			
				|  |  | +    if sys.version_info < (3, 0):
 | 
	
		
			
				|  |  | +        for n in etree_iter(tree):
 | 
	
		
			
				|  |  | +            if n.text is not None:
 | 
	
		
			
				|  |  | +                if not isinstance(n.text, compat_str):
 | 
	
		
			
				|  |  | +                    n.text = n.text.decode('utf-8')
 | 
	
		
			
				|  |  | +    return tree
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if sys.version_info < (3, 0) and sys.platform == 'win32':
 |