A Python ElementTree no le gustan los dos puntos en el nombre de la instrucción de procesamiento

El siguiente código:

import xml.etree.ElementTree as ET xml = '''\      ''' root = ET.fromstring(xml) xml2 = xml.replace('LazyComment ', 'LazyComment:') print(xml2) try: root2 = ET.fromstring(xml2) except ET.ParseError: print("\nERROR in xml2!!!\n") xml3 = xml2.replace('testCaseConfig', 'testCaseConfig xmlns:Blah="http://www.w3.org/TR/html4/"', 1) print(xml3) try: root3 = ET.fromstring(xml3) except ET.ParseError: print("\nERROR in xml3!!!\n") raise 

Da esta salida:

       ERROR in xml2!!!       ERROR in xml3!!! Traceback (most recent call last): File "C:\Users\Paddy3118\Google Drive\Code\elementtree_error.py", line 30, in  root3 = ET.fromstring(xml3) File "C:\Anaconda3\envs\Py3.5\lib\xml\etree\ElementTree.py", line 1333, in XML parser.feed(text) xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 3, column 17 

Busqué y encontré esta Q que señalaba otros recursos que leí.

Parece que el ‘?’ lo convierte en una instrucción de procesamiento cuyo nombre de etiqueta puede incluir dos puntos. Sin el ‘?’ luego, los dos puntos en un nombre indican el espacio de nombres y una de las respuestas indicó que la definición del espacio de nombres debería hacer que las cosas funcionen.

Combinando ‘?’ y ‘:’ aunque causa problemas con ElementTree.

Me dan archivos xml de este tipo que son utilizados por otras herramientas que lo analizan bien y que quieren procesarlo yo mismo usando Python. ¿Algunas ideas?

Gracias.

De acuerdo con las especificaciones de W3C Extensible Markup Language 1.0 en Common Syntactic Constructs :

Los espacios de nombres en la Recomendación XML [Nombres XML] asignan un significado a los nombres que contienen caracteres de dos puntos. Por lo tanto, los autores no deben usar los dos puntos en los nombres XML, excepto para fines de espacio de nombres, pero los procesadores XML deben aceptar los dos puntos como un nombre.

Y más adelante en la nota W3C XPath 1.0 sobre los nodos de instrucciones de procesamiento :

Una instrucción de procesamiento tiene un nombre expandido: la parte local es el objective de la instrucción de procesamiento; el URI del espacio de nombres es nulo.

En total, Es una instrucción de procesamiento no válida, ya que los dos puntos se utilizan para hacer referencia a los URI del espacio de nombres y para procesar las instrucciones que la parte está nula o vacía. Por lo tanto, el procesador XML de Python se queja de que usar una instrucción de este tipo no genera un XML bien formado.

Además, reconsidere aquellas herramientas que generan tales instrucciones de procesamiento no válidas, ya que no manejan documentos XML válidos. Posiblemente, estas herramientas traten los archivos XML como documentos de texto (de manera similar a la forma en que pudo reemplazar la representación de cadena de XML pero no habría podido agregar una instrucción usando etree ).

       

No es válido el XML. No puedes tener atributos en la etiqueta de cierre. La última línea debe ser solo

También los comentarios están escritos así.