Я написал довольно простой фильтр на питоне, используя ElementTree для искажения контекстов некоторых файлов xml. И это работает, более или менее.
Но он переупорядочивает атрибуты различных тегов, и я бы не хотел этого делать.
Кто-нибудь знает переключатель, который я могу бросить, чтобы он сохранял их в указанном порядке?
Контекст для этого
Я работаю с инструментом физики элементарных частиц, который имеет сложную, но странно ограниченную систему конфигурации, основанную на файлах xml. Среди многих вещей, настроенных таким образом, есть пути к различным файлам статических данных. Эти пути жестко закодированы в существующем xml, и нет никаких средств для их установки или изменения в зависимости от переменных среды, и в нашей локальной установке они обязательно находятся в другом месте.
Это не катастрофа, потому что используемый нами комбинированный инструмент управления исходным кодом и сборкой позволяет нам скрывать определенные файлы с помощью локальных копий. Но даже если поля данных являются статическими, xml — нет, поэтому я написал сценарий для исправления путей, но с перестановкой атрибутов различия между локальной и основной версиями читать труднее, чем необходимо.
Это мой первый опыт использования ElementTree (и только мой пятый или шестой проект на Python), так что, возможно, я просто делаю это неправильно.
Абстрагированный для простоты код выглядит так:
tree = elementtree.ElementTree.parse(inputfile)
i = tree.getiterator()
for e in i:
e.text = filter(e.text)
tree.write(outputfile)
Разумно или глупо?
Ссылки по теме: