Voici un petit exemple qui permet de modifier la valeur d'une balise en fonction de son attribut et de sa valeur.
XML d'origine:
<xml>
<ma_balise mon_attribut="ok">valeur1</ma_balise>
<ma_balise mon_attribut="ko">valeur2</ma_balise>
<ma_balise>valeur3</ma_balise>
<ma_balise mon_attribut="ok">valeur4</ma_balise>
<ma_balise>valeur5</ma_balise>
</xml>
Script Python:
>>> from lxml import etree
>>> xml = etree.parse('monfichier.xml')
>>> for ma_balise in xml.getchildren():
if 'mon_attribut' in ma_balise.attrib and ma_balise.attrib['mon_attribut'] == 'ok':
ma_balise.text = 'nouvelle valeur'
# Si besoin d'une section CDATA
# ma_balise.text = etree.CDATA('nouvelle valeur')
>>> with open('monfichier.xml', 'w') as f1:
f1.write(etree.tounicode(xml))
>>>
XML après traitement:
<xml>
<ma_balise mon_attribut="ok">nouvelle valeur</ma_balise>
<ma_balise mon_attribut="ko">valeur2</ma_balise>
<ma_balise>valeur3</ma_balise>
<ma_balise mon_attribut="ok">nouvelle valeur</ma_balise>
<ma_balise>valeur5</ma_balise>
</xml>
Seules les balises ayant l'attribut 'mon_attribut' et sa valeur égale à 'ok' ont été modifiées.