myxml module

Description

Ce module contient quelques fonctions simples pour lire un fichier xml. Les fonctions permettent à partir d’une liste de ligne xml ou d’un fichier xml, d’extraire un bloc de données contenu entre deux balises, d’obtenir les attributs et les valeurs associées à une balise, d’extraire les données entre deux balises et d’obtenir le nom d’une balise.

Vocabulaire

Par la suite on emploiera les termes balise, clefs, valeur et bloc. Voici ce qu’on appellera un bloc et qui définit les autres terme

<balise clefs1="valeur" clefs2="valeur">
    bla bla
</balise>

Dans les exemples, on travaille sur un fichier xml comme celui ci

<monxml>
    <info>
        <i> coucou </i>
        <age nom="toto">  18 </age>
        <taille nom="tata"> 160 </taille>
    </info>
    <param>
        <allsets>
            <set info="att 1" type="a">
                <i> 1. </i>
            </set>
            <set info="att 2" type="b">
                <i> 2. </i>
            </set>
            <set info="att 3" type="a">
                <i> 3. </i>
            </set>
        </allsets>
    </param>
</monxml>
myxml.getBlocs(balise, liste, clefs=None, onlyfirst=False)[source]

Renvoie une liste dont chaque élément contient la liste des lignes correspondantes aux blocs délimités par balise, c’est à dire comprises entre <balise> et </balise>.

Parameters:
  • balise (string) – balise name
  • liste (list or file object) – xml input file
  • clefs (dict) – dictionnary of {clefs: valeur}, if clefs is not None, only blocs with these clefs et valeurs are returned.
  • onlyfirst (bool) – If true, only the first bloc is returned

Examples using the xml sample show at the top of this page :

>>> xml = open("fichier.xml", "r").readlines()

You want bloc info

>>> getBlocs("info", xml)
[['<info>', '<i> coucou </i>', '<age nom="toto">  18 </age>', '<taille nom="tata"> 160 </taille>', '</info>']] 

You want blocs set

>>> getBlocs("set", xml)
[['<set info="att 1" type="a">', '<i> 1. </i>', '</set>'], ['<set info="att 2" type="b">', '<i> 2. </i>', '</set>'], ['<set info="att 3" type="a">', '<i> 3. </i>', '</set>']]

You want the first bloc set

>>> getBlocs("set", xml, onlyfirst = True)
['<set info="att 1" type="a">', '<i> 1. </i>', '</set>']

You want bloc set with clefs type equal b and clefs info equal att 2

>>> getBlocs("set", xml, {"type":"b", "info":"att 2"})
[['<set info="att 2" type="b">', '<i> 2. </i>', '</set>']]

You want bloc set with clefs type equal a

>>> getBlocs("set", xml, {"type":"a"})
[['<set info="att 1" type="a">', '<i> 1. </i>', '</set>'], ['<set info="att 3" type="a">', '<i> 3. </i>', '</set>']]
myxml.getClefs(ligne, listeClefs)[source]

Retourne dans un dictionnaire, les valeurs des clefs indiquées dans listeClefs lues sur ligne. Si une clefs n’est pas trouvée la valeur None lui est attribuée.

Parameters:
  • ligne (string) – xml input line
  • listeClefs (list) – liste des clefs dont on veut les valeurs
>>> ligne = '<i type="string" name="PREC">medium</i>'
>>> getClefs(ligne, ["type", "name"])
{'type': 'string', 'name': 'PREC'}
myxml.getNodeData(ligne)[source]

Retourne les données contenues entre deux balises xml lues sur ligne

Parameters:ligne (string) – xml input line

Examples :

>>> ligne = '<i type="string" name="PREC">medium</i>'
>>> getNodeData(ligne)
['medium']
>>> ligne = '<i name="subversion" type="string">3Apr08 complex  serial</i>'
>>> getNodeData(ligne)
['3Apr08', 'complex', 'serial']
>>> ligne = '<i name="ENCUT">    450.00000000</i>'
>>> getNodeData(ligne)
['450.00000000']
myxml.getNodeName(ligne)[source]

Retourne le nom de la balise sur une ligne d’un fichier xml

Parameters:ligne (string) – xml input line

Examples :

>>> ligne = "<kpoints></kpoints>"
>>> getNodeName(ligne)
'kpoints'
>>> ligne = '<i name="subversion" type="string">3Apr08 complex  serial</i>'
>>> getNodeName(ligne)
'i'

Table Of Contents

Previous topic

Crystal module

Next topic

Scripts

This Page