Подавить автоматически добавленное пространство имен в etree Python - PullRequest
0 голосов
/ 12 февраля 2020
<rootTag xmlns="model">
<tag>

У меня есть файл xml с пространством имен, указанным выше. Я могу использовать etree в Python, чтобы проанализировать его, но после внесения изменений и записи его обратно в файл, etree изменяет его на

<rootTag xmlns:ns0="model">
<ns0:tag>

и добавляет «ns0» ко всем тегам. Я не хочу, чтобы это случилось. Пример программы выглядит следующим образом:

et = xml.etree.ElementTree.parse(xml_name)
root = (et.getroot())
root.find('.//*'+pattern).text = new_text
et.write(xml_name)

Есть ли какой-нибудь способ подавить это автоматическое c изменение? Спасибо

1 Ответ

1 голос
/ 13 февраля 2020

Это можно сделать, используя register_namespace(), используя пустую строку для префикса ...

ET.register_namespace("", "model")

Полный рабочий пример ...

import xml.etree.ElementTree as ET

xml = """
<rootTag xmlns="model">
    <tag>foo</tag>
</rootTag>
"""

ET.register_namespace("", "model")

root = ET.fromstring(xml)
root.find("{model}tag").text = "bar"
print(ET.tostring(root).decode())

вывод на печать ...

<rootTag xmlns="model">
    <tag>bar</tag>
</rootTag>

Также см. этот ответ для другого примера.

...