Trucs & Astuces

Python: Modifier la valeur d'une balise d'un XML en fonction de la valeur de son attribut

Python: Modifier la valeur d'une balise d'un XML en fonction de la valeur de son attribut

Par ronan , 20 septembre, 2016

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.

Etiquettes