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

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

Ответы на вопрос(0)

Ваш ответ на вопрос