根据其属性查找xml元素并更改其值 [英] find xml element based on its attribute and change its value

查看:28
本文介绍了根据其属性查找xml元素并更改其值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 python xmlElementTree 并希望根据其属性分配或修改 xml 元素值.有人可以告诉我怎么做吗?

I am using python xmlElementTree and want to assign or modify a xml element value based on its attribute. Can somebody give me an idea how to do this?

例如:这是一个xml文件,我需要根据属性sys/phoneNumber/1"、sys2/SMSnumber/1"等设置元素number"的值.

For example: Here is a xml file and I need to set the value for the element "number" based on the attribute "sys/phoneNumber/1", "sys2/SMSnumber/1" and so on.

<root>
    <phoneNumbers>
        <number topic="sys/phoneNumber/1" update="none" />
        <number topic="sys/phoneNumber/2" update="none" />
        <number topic="sys/phoneNumber/3" update="none" />
    </phoneNumbers>

    <gfenSMSnumbers>
        <number topic="sys2/SMSnumber/1" update="none" />
        <number topic="sys2/SMSnumber/2" update="none" />
    </gfenSMSnumbers>
</root>

为 XML 文件中的标签根添加了闭包.

edit: Added closure for the tag root in the XML file.

推荐答案

您可以这样访问属性值:

You can access the attribute value as this:

from elementtree.ElementTree import XML, SubElement, Element, tostring

text = """
<root>
    <phoneNumbers>
        <number topic="sys/phoneNumber/1" update="none" />
        <number topic="sys/phoneNumber/2" update="none" />
        <number topic="sys/phoneNumber/3" update="none" />
    </phoneNumbers>

    <gfenSMSnumbers>
        <number topic="sys2/SMSnumber/1" update="none" />
        <number topic="sys2/SMSnumber/2" update="none" />
    </gfenSMSnumbers>
</root>
"""

elem = XML(text)
for node in elem.find('phoneNumbers'):
    print node.attrib['topic']
    # Create sub elements
    if node.attrib['topic']=="sys/phoneNumber/1":
        tag = SubElement(node,'TagName')
        tag.attrib['attr'] = 'AttribValue'

print tostring(elem)

忘了说,如果你的ElementTree版本大于1.3,可以使用XPath:

forget to say, if your ElementTree version is greater than 1.3, you can use XPath:

elem.find('.//number[@topic="sys/phoneNumber/1"]')

http://effbot.org/zone/element-xpath.htm

或者你可以使用这个简单的:

or you can use this simple one:

for node in elem.findall('.//number'):
    if node.attrib['topic']=="sys/phoneNumber/1":
        tag = SubElement(node,'TagName')
        tag.attrib['attr'] = 'AttribValue'

这篇关于根据其属性查找xml元素并更改其值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆