2012-05-06 14 views
7

He creado un documento XML utilizando xml.etree.elementtree.Element, y quería imprimirlo utilizando la función ElementTree.write() pero el La etiqueta de declaración que sale espython: xml.etree.elementtree.ElemenTtree.write() declaración etiqueta

<?xml version='1.0' encoding='UTF-8'?> 

Mientras que yo necesito estar entre comillas dobles. ¿Existe alguna manera de cambiar esto?

+0

Uh ... ¿por qué necesitas comillas dobles? –

+0

¿por qué esto incluso importa? es igualmente válido xml con solo o con comillas dobles. – mata

+2

porque es una tarea y por alguna razón el profesor hace una diferencia en el xml. En lugar de comparar los elementos. – Bg1987

Respuesta

1

Finalmente he utilizado la función toString y adjunta el XML a la etiqueta correcta y luego la función python file.write. Es feo (y estoy mintiendo sobre la codificación real del archivo) pero funciona.

+0

¿Podría proporcionar el código que escribió para solucionar este problema? –

0

Tuve que hacer más o menos lo mismo, excepto al revés, debido a hacks en varias herramientas de $ lugar de trabajo que exigen comillas simples donde python's ElementTree.write pone comillas dobles. (Un poco de código busca la cadena literal status='ok' y no reconoce status="ok". Sí, ese código está roto, de varias maneras, en realidad, pero tengo que solucionarlo.)

Afortunadamente "datos de usuario" solo o las comillas dobles están codificadas como &apos; y &quot; (respectivamente). En mi caso, yo ya estaba utilizando en lugar de tostringwrite (por otras razones), por lo que tengo: (. Obviamente usted querrá replace("'", '"') lugar)

import xml.etree.ElementTree as ET 
# [... mass snippage] 
     text = ET.tostring(reply).replace('"', "'") 
     # [... snippaage] 
     self.wfile.write(text) 

+0

El problema es que algunos valores cotizados pueden contener comillas dobles. El reemplazo simple puede romper el contenido. – pepr

+0

@ pepr: otorgaré la posibilidad teórica, pero en todas mis pruebas (que por supuesto eran específicas de mis datos, y tal vez las bibliotecas instaladas de python también), 'xml.etree.ElementTree' siempre codificaba comillas dobles como' " 'si estuvieran permitidos en esa posición. – torek

0

Tuve el mismo problema, miré en el código de ElementTree.py y vi lo siguiente.

Para la etiqueta raíz (comillas simples):

 if method == "xml": 
      write("<?xml version='1.0' encoding='%s'?>\n" % encoding) 

Y para los atributos (comillas dobles):

write(" %s=\"%s\"" % (qnames[k], v)) 

¡Está codificados de esa manera ...

lo cambié (localmente) a:

"<?xml version=\"1.0\" encoding=\"%s\"?>\n" 

Por lo tanto, cada atributo tiene una cotización doble ahora.

Cuestiones relacionadas