Вы можете передать root
вашего дерева функции, а затем использовать ElementTree.SubElement
, чтобы добавить новый элемент к вашему root
. Я работал с вашим примером:
import xml.etree.ElementTree as ET
def function(root):
new_element = ET.SubElement(root, "abc")
new_element.set("name", "Jonas")
new_element.text = "This is text"
tree = ET.parse("test.xml")
root = tree.getroot()
# Before
print ET.tostring(root)
for element in root.findall("./abc"):
function(root)
# After
print ET.tostring(root)
До:
<root>
<abc>SomeTree1</abc>
</root>
После:
<root>
<abc>SomeTree1</abc>
<abc name="Jonas">This is text</abc>
</root>
Обратите внимание, что я отполированы XML-сам, это не очень по-умолчанию. Если вы хотите красивую печать, проверьте this ответ.
Редактировать: Извините, из комментариев я подумал, что вы хотите добавить новый элемент, а не заменить текущий. Для замены этого элемента, вы можете либо изменить функцию выше, принять в элементе, а затем добавить новый элемент перед удалением оригинала, или вы могли бы просто изменить существующий элемент непосредственно:
import xml.etree.ElementTree as ET
def function(element):
element.text = "New text"
element.tag = "New tag"
element.set("name", "Jonas")
tree = ET.parse("test.xml")
root = tree.getroot()
# Before
print ET.tostring(root)
for element in root.findall("./abc"):
function(element)
# After
print ET.tostring(root)
Перед:
<root>
<abc>SomeTree1</abc>
</root>
После:
<root>
<New tag name="Jonas">New text</New tag>
</root>
Что именно вы имеете в виду под обновлением? Любые изменения, внесенные вами в ваши элементы, будут автоматически сохранены в корне. – Plasma
@Plasma Я думаю, стоит упомянуть, что эти изменения происходят внутри функций. (я отредактирую вопрос, так что с этого момента будет яснее) – Omer