Сохранять существующие пространства имен при перезаписывании 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> 

Что мне делать, чтобы получить нужный мне результат?

Python - лучший язык программирования в мире.