Pregunta

¿Qué usaría para alterar un archivo XML mientras conserva la mayor cantidad posible de diseño, incluyendo sangría y comentarios?

Mi problema es que tengo un par de archivos XML masivos editados a mano que describen una interfaz de usuario, y ahora necesito traducir varios atributos a otro idioma.

He intentado hacer esto usando Python + ElementTree, pero no conservó ni espacios en blanco ni comentarios.

He visto que se sugiere XSLT para preguntas similares, pero no creo que sea una alternativa en este caso, ya que necesito hacer algo de lógica y búsquedas para cada atributo.

Sería preferible si también se conserva el orden de los atributos en cada elemento, pero puedo tolerar el cambio de orden.

¿Fue útil?

Solución

Cualquier módulo de manipulación DOM debe satisfacer sus necesidades. El diseño es solo un dato de texto, por lo que se representa como nodos de texto en DOM:

>>> from xml.dom.minidom import parseString
>>> dom = parseString('''\
... <message>
...   <text>
...     Hello!
...   </text>
... </message>''')
>>> dom.childNodes[0].childNodes
[<DOM Text node "u'\n  '">, <DOM Element: text at 0xb765782c>, <DOM Text node "u'\n'">]
>>> text = dom.getElementsByTagName('text')[0].childNodes[0]
>>> text.data = text.data.replace(u'Hello', u'Hello world')
>>> print dom.toxml()
<?xml version="1.0" ?><message>
  <text>
    Hello world!
  </text>
</message>

Otros consejos

Si utiliza un procesador XSLT como xt , puede escribir la extensión métodos en Java que pueden realizar cualquier transformación arbitraria que necesite.

Dicho esto, he usado xml.dom.minidom módulo con éxito para este tipo de transformación. Preserva el espacio en blanco y el diseño.

scroll top