Предположим, что у меня есть следующий XML, который я хочу изменить с помощью Python ElementTree
:
<root xmlns:prefix="URI">
<child company:name="***"/>
...
</root>
Я выполняю некоторые изменения в XML-файле, например:
import xml.etree.ElementTree as ET
tree = ET.parse('filename.xml')
# XML modification here
# save the modifications
tree.write('filename.xml')
Тогда XML-файл выглядит следующим образом:
<root xmlns:ns0="URI">
<child ns0:name="***"/>
...
</root>
Как видите, пространство имен prefix
изменилось на ns0
.Я знаю об использовании ET.register_namespace()
как упоминалось здесь .
Проблема с ET.register_namespace()
заключается в том, что:
- Вам необходимо знать
prefix
и URI
- Он не может использоваться с пространством имен по умолчанию.
например, если XML выглядит так:
<root xmlns="http://uri">
<child name="name">
...
</child>
</root>
Он будет преобразован во что-тонапример:
<ns0:root xmlns:ns0="http://uri">
<ns0:child name="name">
...
</ns0:child>
</ns0:root>
Как видите, пространство имен по умолчанию изменено на ns0
.
Есть ли способ решить эту проблему с помощью ElementTree
?