我有一个不太好的XML,在标签名称中有连字符,我想用下划线替换(为了能够使用lxml.objectify).我想替换所有标记名称,包括嵌套的子项.
示例XML:
<job>
<server>
<cpu-set>
</cpu-set>
</server>
<ip-routings>
</ip-routings>
</job>
我想以一种干净的方式(没有正则表达式,但使用像lxml这样的XML库)将这个XML转换为这个:
<job>
<server>
<cpu_set>
</cpu_set>
</server>
<ip_routings>
</ip_routings>
</job>
什么是pythonic和干净的方式来做到这一点?
解决方法:
使用xpath查找带连字符的元素并重写标记:
from lxml import etree
data = """<job>
<server>
<cpu-set>
</cpu-set>
</server>
<ip-routings>
</ip-routings>
</job>"""
doc = etree.XML(data)
for e in doc.xpath('//*[contains(local-name(),"-")]'):
e.tag = e.tag.replace('-','_')
print etree.tostring(doc)
产量:
<job>
<server>
<cpu_set>
</cpu_set>
</server>
<ip_routings>
</ip_routings>
</job>