如何使用 python LXML 重命名属性名称?
How to rename an attribute name with python LXML?
关于如何使用 LXML 获取和设置属性的 value 的文档相当详细,但是有没有办法重命名 name 现有属性?
目标是从
<element old="cheese"/>
到
<element new="cheese"/>
我目前正在做的事情有点复杂 — 删除属性然后使用新名称和旧值重新添加它:
from io import StringIO
from lxml import etree
doc = StringIO('<element old="cheese"/>')
tree = etree.parse(doc)
elem = tree.getroot()
attr_value = elem.attrib['old']
del elem.attrib['old']
elem.attrib['new'] = attr_value
有没有办法直接重命名属性,而不是删除并重新添加新键?
首先,我希望我能对你的问题投两次赞成票,因为你给出了一个我可以 copy/paste/run 的最小的、可重现的例子。 stack overflow 的新手应该注意了!我想这是因为和你我一样久的用户并没有问那么多问题。
我不认为你所做的是那么复杂,但由于 .attrib
是一个命令,你可以改为这样做:
elem.attrib['new'] = elem.attrib.pop('old')
完整示例:
from io import StringIO
from lxml import etree
doc = StringIO('<element old="cheese"/>')
tree = etree.parse(doc)
elem = tree.getroot()
elem.attrib['new'] = elem.attrib.pop('old')
print(etree.tostring(tree).decode())
打印输出...
<element new="cheese"/>
以下与 python“开箱即用”python xml lib - ElementTree .
相同
import xml.etree.ElementTree as ET
xml = '''<element old="cheese"/>'''
root = ET.fromstring(xml)
root.attrib['new'] = root.attrib.pop('old')
ET.dump(root)
输出
<element new="cheese" />
关于如何使用 LXML 获取和设置属性的 value 的文档相当详细,但是有没有办法重命名 name 现有属性?
目标是从
<element old="cheese"/>
到
<element new="cheese"/>
我目前正在做的事情有点复杂 — 删除属性然后使用新名称和旧值重新添加它:
from io import StringIO
from lxml import etree
doc = StringIO('<element old="cheese"/>')
tree = etree.parse(doc)
elem = tree.getroot()
attr_value = elem.attrib['old']
del elem.attrib['old']
elem.attrib['new'] = attr_value
有没有办法直接重命名属性,而不是删除并重新添加新键?
首先,我希望我能对你的问题投两次赞成票,因为你给出了一个我可以 copy/paste/run 的最小的、可重现的例子。 stack overflow 的新手应该注意了!我想这是因为和你我一样久的用户并没有问那么多问题。
我不认为你所做的是那么复杂,但由于 .attrib
是一个命令,你可以改为这样做:
elem.attrib['new'] = elem.attrib.pop('old')
完整示例:
from io import StringIO
from lxml import etree
doc = StringIO('<element old="cheese"/>')
tree = etree.parse(doc)
elem = tree.getroot()
elem.attrib['new'] = elem.attrib.pop('old')
print(etree.tostring(tree).decode())
打印输出...
<element new="cheese"/>
以下与 python“开箱即用”python xml lib - ElementTree .
相同import xml.etree.ElementTree as ET
xml = '''<element old="cheese"/>'''
root = ET.fromstring(xml)
root.attrib['new'] = root.attrib.pop('old')
ET.dump(root)
输出
<element new="cheese" />