Сохраняйте существующие пространства имен при перезаписи XML-файла с помощью ElementTree и Python
У меня есть файл XML в следующем формате
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
<bat>1</bat>
</bar>
<a>
<b xmlns="urn:schemas-microsoft-com:asm.v1">
<c>1</c>
</b>
</a>
</foo>
Я хочу изменить значение bat на '2' и изменить файл на это:
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
<bat>2</bat>
</bar>
<a>
<b xmlns="urn:schemas-microsoft-com:asm.v1">
<c>1</c>
</b>
</a>
</foo>
Я открываю этот файл, делая это
tree = ET.parse(filePath)
root = tree.getroot()
Затем я изменяю значение bat на '2' и сохраняю файл следующим образом:
tree.write(filePath, "utf-8", True, None, "xml")
Значение bat успешно меняется на 2, но файл XML теперь выглядит следующим образом.
<?xml version="1.0" encoding="utf-8"?>
<foo xmlns:ns0="urn:schemas-microsoft-com:asm.v1">
<bar>
<bat>2</bat>
</bar>
<a>
<ns0:b>
<ns0:c>1</ns0:c>
</ns0:b>
</a>
</foo>
Чтобы решить проблему наличия пространства имен с именем ns0, я делаю следующее перед анализом документа
ET.register_namespace('', "urn:schemas-microsoft-com:asm.v1")
Это избавляет от пространства имен ns0, но XML-файл теперь выглядит так
<?xml version="1.0" encoding="utf-8"?>
<foo xmlns="urn:schemas-microsoft-com:asm.v1">
<bar>
<bat>2</bat>
</bar>
<a>
<b>
<c>1</c>
</b>
</a>
</foo>
Что мне делать, чтобы получить нужный мне результат?