Изменить XML при сохранении макета - PullRequest
4 голосов
/ 27 октября 2009

Что бы вы использовали для изменения XML-файла при сохранении максимально возможного размера макета, включая отступы и комментарии?

Моя проблема в том, что у меня есть несколько огромных отредактированных вручную XML-файлов, описывающих пользовательский интерфейс, и теперь мне нужно перевести несколько атрибутов на другой язык.

Я пытался сделать это, используя Python + ElementTree, но он не сохранил ни пробелов, ни комментариев.

Я видел XSLT, предложенный для подобных вопросов, но я не думаю, что это альтернатива в этом случае, так как мне нужно сделать некоторую логику и поиск для каждого атрибута.

Было бы предпочтительно, если бы порядок атрибутов в каждом элементе также сохранялся, но я могу допустить изменение порядка.

Ответы [ 2 ]

2 голосов
/ 27 октября 2009

Любой модуль манипуляции DOM должен соответствовать вашим потребностям. Макет - это просто текстовые данные, поэтому он представлен в виде текстовых узлов в 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>
1 голос
/ 27 октября 2009

Если вы используете процессор XSLT, такой как xt , то вы можете написать методы расширения в Java, которые могут выполнять любое произвольное преобразование, которое вам нужно.

Сказав это, я успешно использовал модуль Python xml.dom.minidom для такого рода преобразований. Это сохраняет пробелы и расположение.

...