<Galactus id="ironman">
<GalactusId>METALIC</GalactusId>
<GalactusName>COMMUNICATOR</GalactusName>
</Galactus>
<Galactus id="HULK">
<GalactusId>BULKY</GalactusId>
<GalactusName>CRUSHER</GalactusName>
</Galactus>
我想将GalactusId值替换为“Galactus id”,即来自现有GalactusId的HULK或ironman + First 3字符 和GalactusName一样。所以看起来很像。
<Galactus id="ironman">
<GalactusId>ironman_MET</GalactusId>
<GalactusName>ironman_COM</GalactusName>
</Galactus>
<Galactus id="HULK">
<GalactusId>HULK_BUL</GalactusId>
<GalactusName>HULK_CRU</GalactusName>
</Galactus>
所有子标签都应相应更改,而不仅仅是这两个。
答案 0 :(得分:1)
使用正则表达式解析XML或HTML是一种bad做法。您应该使用XML Parser。对于Python,lxml可能最受欢迎。
import lxml.etree
xml = lxml.etree.fromstring('''
<xml>
<Galactus id="ironman">
<GalactusId>METALIC</GalactusId>
<GalactusName>COMMUNICATOR</GalactusName>
</Galactus>
<Galactus id="HULK">
<GalactusId>BULKY</GalactusId>
<GalactusName>CRUSHER</GalactusName>
</Galactus>
</xml>''')
for galactus in xml.iterfind('.//Galactus'):
for child in galactus.getchildren():
child.text = galactus.attrib['id'] + '_' + child.text[:3]
print(lxml.etree.tostring(xml).decode())