【问题标题】:Updating xml using lxml使用 lxml 更新 xml
【发布时间】:2019-10-01 13:20:01
【问题描述】:

这是我的 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>

我想用value= "myValue" 更新label="actual-value:"。 首先我搜索了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。我在这里错过了什么??

【问题讨论】:

  • 好吧。我忘了在最后添加一行:tree.write('my.xml')

标签: xml python-2.7 xml-parsing lxml elementtree


【解决方案1】:

我相信你已经很接近了:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2013-05-10
    相关资源
    最近更新 更多