Вопрос

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

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

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

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

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

Это было полезно?

Решение

Любой модуль манипулирования 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>

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top