我需要使用 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
一种可能的解决方案是从头开始重新创建元素属性:
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"/>'