将属性插入位置

问题描述 投票:0回答:1

我需要使用 lxml 库在正确的位置插入元素属性。

这是一个示例,我尝试在 attr3 属性前面插入 attr2 属性:

from lxml import etree

xml = '<root attr0="val0" attr1="val1" attr3="val3" attr4="val4" attr5="val5"/>'
root = etree.fromstring(xml)

inse_pos = root.keys().index('attr3')
attrib_items = root.items()
attrib_items.insert(inse_pos, ('attr2', 'val2'))
root.attrib = dict(attrib_items)

print(etree.tostring(root))

但我收到错误:

AttributeError: attribute 'attrib' of 'lxml.etree._Element' objects is not writable

python lxml
1个回答
0
投票

一种可能的解决方案是从头开始重新创建元素属性:

from lxml import etree

xml = '<root attr0="val0" attr1="val1" attr3="val3" attr4="val4" attr5="val5"/>'
root = etree.fromstring(xml)

attribs = root.attrib.items()
root.attrib.clear()

for k, v in attribs:
    if k == "attr3":
        root.attrib["attr2"] = "val2"
    root.attrib[k] = v

print(etree.tostring(root))

打印:

b'<root attr0="val0" attr1="val1" attr2="val2" attr3="val3" attr4="val4" attr5="val5"/>'
© www.soinside.com 2019 - 2024. All rights reserved.