Pergunta

O que você usaria para alterar um arquivo XML, preservando o máximo possível de layout, incluindo recuo e comentários?

O meu problema é que eu tenho um par de arquivos XML enormes editados à mão que descrevem uma interface de usuário, e agora eu preciso para traduzir vários atributos para outro idioma.

Eu tentei fazer isso usando Python + ElementTree, mas não preservar nenhum espaço em branco nem comentários.

Eu vi XSLT sendo sugerido para perguntas semelhantes, mas eu não acho que é uma alternativa, neste caso, uma vez que eu preciso fazer alguma lógica e pesquisas para cada atributo.

Seria preferível se a ordem atributo em cada elemento é preservado como bem, mas podem tolerar ordem alterada.

Foi útil?

Solução

Qualquer módulo de manipulação DOM deve atendam às suas necessidades. Layout é apenas dados de texto, por isso é representado como nós de texto no 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>

Outras dicas

Se você usar um processador XSLT como xt , então você pode escrever de extensão métodos em Java que pode realizar qualquer transformação arbitrária que você precisa.

Dito isto, eu usei Python xml.dom.minidom módulo com sucesso para este tipo de transformação. Ele não preservar espaço em branco e layout.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top