Изменить XML с помощью ElementTree

<grandParent>
    <parent>
       <child>Sam/Astronaut</child>
    </parent>
</grandParent>

Я хочу изменить вышеуказанный XML, добавив еще один дочерний тег в родительский тег. Я делаю что-то вроде этого..

tree = ET.parse("test.xml")
a=ET.Element('parent')
b=ET.SubElement(a,"child")
b.text="Jay/Doctor"
tree.write("test.xml")

Это правильный способ изменения файла XML? Есть ли лучший способ? или что еще я должен заботиться в приведенном выше коде?

1 ответ

Решение

Ваш код создает совершенно новое дерево и добавляет к нему Jay. Вам нужно подключить Джея к существующему дереву, а не к новому.

Попробуй это:

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
a = tree.find('parent')          # Get parent node from EXISTING tree
b = ET.SubElement(a,"child")
b.text = "Jay/Doctor"
tree.write("test.xml")

Если вы хотите найти конкретного ребенка, вы можете сделать это:

import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
a = tree.find('parent')
for b in a.findall('child'):
    if b.text.strip() == 'Jay/Doctor':
        break
else:
    ET.SubElement(a,"child").text="Jay/Doctor"
tree.write("test.xml")

уведомление a.findall() (похожий на a.find(), но возвращает все названные элементы). xml.etree имеет очень ограниченные критерии поиска. Вы могли бы рассмотреть возможность использования lxml.etree И его .xpath() метод.

Другие вопросы по тегам