Разбор файла типа xml - PullRequest
       30

Разбор файла типа xml

0 голосов
/ 21 ноября 2018

У меня есть документ типа xml:

<configuration>
    <appSettings>
        <add key="title" value="Donny" />
        <add key="updaterApplication" value="Updater v4.3" />
    </appSettings>
</configuration>

И мне нужно изменить конкретную запись, например, от value="Updater v4.3" до value="Updater v4.4" при добавлении key="updaterApplication".

Я пытался:

import xml.etree.ElementTree as ET

tree = ET.parse(my_file_name)
root = tree.getroot()
tkr_itms = root.findall('appSettings')
for elm in tkr_itms[0]:
    print(elm)
    print(elm.attributes)
    print(elm.value)
    print(elm.text)

Но не могу найти адрес между '< ... />'.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я вижу, вы выяснили, что "содержимое между '<... />'" является атрибутами.

Альтернатива итерации по элементам add и проверке значения атрибута keyпроверить значение атрибута в предикате .

Пример ...

Python

import xml.etree.ElementTree as ET

tree = ET.parse("my_file_name")
root = tree.getroot()
root.find('appSettings/add[@key="updaterApplication"]').attrib["value"] = "Updater v4.4"

print(ET.tostring(root).decode())

Вывод

<configuration>
    <appSettings>
        <add key="title" value="Donny" />
        <add key="updaterApplication" value="Updater v4.4" />
    </appSettings>
</configuration>

Для получения дополнительной информации о XPath в ElementTree см. Здесь.

0 голосов
/ 22 ноября 2018

Не бери в голову ...:

import xml.etree.ElementTree as ET
tree = ET.parse(my_file_name)
root = tree.getroot()
for elm in root.iter('add'):
    if elm.attrib['key']=='updaterApplication':
        elm.attrib['value'] = 'Updater v4.4'
    print(elm.attrib)
...