Обновление xml с использованием lxml - PullRequest
1 голос
/ 14 мая 2019

Это одна часть моего xml:

<subtests id="39845890" name="Signallexikon:" subTestValuation="INFO" timestamp="2019-05-10T14:51:31.207+02:00" type="NewSubtest">
<subTestItem label="label:" value="Signallexikon:"/>
<subTestItem label="actual-value:" value="-"/>
<subTestItem label="rated-value:" value=" "/>
<subTestItem label="dimension:" value="-"/>
<subTestItem label="comment:" value=" "/>
</subtests>

Я хочу обновить label="actual-value:" с помощью value= "myValue".Сначала я искал тег subtests, а затем обновил его дочерний элемент subTestItem:

tree = etree.parse('my.xml')
subtest = tree.xpath("//subtests[@name='Signallexikon:']")[0]
subtestItem = subtest.xpath(".//subTestItem[@label='actual-value:']")[0]
subtestItem.set("value", 'myValue')

Проблема в том, что при запуске кода не возникает ошибки, но он также не обновляет мой xml.Что мне здесь не хватает ??

1 Ответ

1 голос
/ 14 мая 2019

Вы довольно близки, я верю:

data = """[your xml above]"""
import lxml.etree as etree
tree = etree.fromstring(data)
subtestItem = tree.find(".//subTestItem[@label='actual-value:']")

Статус до:

print( 'Current value is:', subtestItem.get('value'))

Выход:

Current value is: -

Подстановочные значения:

subtestItem.set("value", 'myValue')

Проверить статус после:

print('Current value is:', subtestItem.get('value'))

Выход:

Current value is: myValue

И чтобы быть в безопасности, проверьте еще раз:

print(etree.tostring(tree).decode())

Выход:

<subtests id="39845890" name="Signallexikon:" subTestValuation="INFO" timestamp="2019-05-10T14:51:31.207+02:00" type="NewSubtest">
<subTestItem label="label:" value="Signallexikon:"/>
<subTestItem label="actual-value:" value="myValue"/>
<subTestItem label="rated-value:" value=" "/>
<subTestItem label="dimension:" value="-"/>
<subTestItem label="comment:" value=" "/>
</subtests>
...