Мне нужно манипулировать XML-файлами с помощью python-Script для создания тестовых данных для устаревшего приложения. Это означает открыть файл, прочитать его, выполнить некоторые манипуляции и записать в файл. Чтобы целевая система могла обрабатывать мои пространства имен testdata, ДОЛЖНО быть сохранено в их первоначальной форме. Файлы, которые я обрабатываю, содержат такие строки, как xmlns:EHC-1234="URI".
Поскольку библиотека elementTree обычно заменяет каждое пространство имен новым, например ns0:ns1: и т. д., я придумал вот такую уродливую штуку:
#hack to preserve namespaces
for elem in ET.iterparse(xmlFile):
try:
try:
if elem[0][0] == "E":
ET.register_namespace(elem[0], elem[1])
except TypeError:
pass
except IndexError:
pass
tree = ET.parse(xmlFile)
#do stuff
.....
tree.write(filename, xml_declaration=True, encoding='utf-8', method="xml")
Очевидно, что это быстро и грязно. (Обратите внимание, что мне нужно проглотить все виды ошибок, потому что есть много других тегов, а не только определения пространства имен в файле, который я анализирую. Мне также приходится дважды анализировать мой файл, потому что пространства имен должны быть зарегистрированы перед разбором файла. чтобы действовать при повторной записи в файл.). Интересно, однако, как можно было бы сделать это в хороший способ? У тебя есть идеи? Я пытался погуглить, но не нашел простого решения, так что, возможно, где-то здесь есть «лучшая практика» :)
Спасибо и здоровья Мише