Python:XML中的所有标记名称中的字符串替换(用下划线替换连字符)

我有一个不太好的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>
上一篇:linux下安装lxml包


下一篇:如何安装python的第三方库?