2009-10-27 4 views
4

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

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

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

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

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

ответ

2

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

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

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

Смежные вопросы