IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

parser un XML avec DOM minidom


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par d�faut parser un XML avec DOM minidom
    Bonjour a tous,

    Je cherche le moyen d'obtenir la liste des valeurs des attributs portant le nom par exemple 'extension' dans toutes les balises ayant pour nom 'fichier' par exemple.
    A ce jour je ne peux obtenir qu'une seule de ces valeurs en pointant sur un numero (dans le code qui suit [10]).
    Donc voici une partie de mon XML
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     <?xml version="1.0" ?>
    <!DOCTYPE racine
      SYSTEM 'racine.dtd'>
    <racine>
    	<repertoire cache="1" nom=".afterstep">
    		<repertoire nom="desktop">
    			<repertoire nom="fonts"/>
    			<repertoire nom="icons"/>
    			<repertoire nom="tiles"/>
    		</repertoire>
    		<repertoire nom="non-configurable">
    			<fichier extension="" nom="AfterStepCategories"/>
    			<fichier extension="" nom="GNOMECategories"/>
    			<fichier extension="" nom="KDECategories"/>
    			<fichier extension="" nom="OtherCategories"/>
    			<fichier extension=".sh" nom="send_postcard"/>
    			<fichier extension="" nom="workspace_state"/>
    et le code ou je parse mon xml afin d'en extraire ce dont j'ai besoin:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    from xml.dom import minidom
    xmldoc = minidom.parse('xmlFileSystem.xml')
    reflist = xmldoc.getElementsByTagName('fichier')
    bitref=reflist[10]
    a=bitref.attributes['nom']
    print a.value
    print bitref.toxml()
    Voil� si quelqu'un a une id�e n'hesitez pas et merci d'avance.

  2. #2
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2006
    Messages
    60
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 60
    Par d�faut
    Bonjour,

    je lis plusieurs exemples sur les manipulations du dom, et de mon c�t�,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    from xml.dom import minidom
    ne fonctionne pas.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      File "/Users/fenhn/Documents/Informatique/python/beginning/dmxml.py", line 2, in <module>
    import xml
    J'ai cru lire que des �l�ments du SAX et du DOM avaient �t� rajout�es dans python, est ce qu'il y a un moyen de cr�er des xml juste avec le python install� de base ?

  3. #3
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par d�faut
    Salut,

    pour ma part, je ne connais pour ainsi dire pas du tout ce package, ce qui ne m'emp�che pas de voir une m�thode pour r�soudre ton besoin:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import re
     
    def findall(tagname, attributename, line):
        pattern = '<%s.* %s="(.*?)"' % (tagname, attributename)
        matcher = re.compile(pattern)
        for match in matcher.search(line):
            yield match.group(1)

  4. #4
    Membre �m�rite
    Homme Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    758
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 758
    Par d�faut
    bonjour,

    je peux te proposer de regarder du c�t� de la librairie non standard lxml. Cette derni�re inclut le langage de requ�tes XPath.

    tu auras juste donc � parser le fichier xml avec la librairie et � cr�er la requ�te XPath idoine.

    il y a un tuto l�:

    http://codespeak.net/lxml/tutorial.html pour le parser
    http://codespeak.net/lxml/xpathxslt.html pour l'utilisation des requ�tes XPath avec lxml

    un exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    from lxml import etree
    data="<racine><repertoire nom='toto'><fichier extension='.sh' nom='toto'/><fichier extension='.txt' nom='toto'/></repertoire></racine>"
    root = etree.fromstring(data)
    et la requ�te xpath qui va bien:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    root.xpath('//fichier/@extension')
    >>>['.sh', '.txt']
    de mon point de vue, c'est le plus simple. XPath n'est pas si compliqu� � apprendre et te rendra bien des services en t'�vitant d'�crire un code lourd pour extraire des donn�es d'un arbre xml.

    petit d�chiffrage de la requ�te XPath:

    - //fichier au d�but signifie que l'on cherche dans tout l'arbre les �l�ments de type 'fichier'
    - //fichier/@extension signifie que l'on cherche les attributs (pr�fixe @) de l'�l�ment fichier).

    xPath renvoit syst�matiquement une liste de toutes les donn�es correspondant � la requ�te.

    exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    # tous les éléments repertoire dans la racine:
    root.xpath("/racine/repertoire") 
    #tous les élements repertoire (quelquesoit leur localisation dans la racine) dont l'attribut nom vaut "toto" les [ ] permettent de spécifier des conditions.
    root.xpath("//repertoire[/@nom='toto']")
    #tous les éléments repertoire vide (ne contenant aucun fichier):
    root.xpath("//repertoire[count(./fichier)=0]")
    c'est beau hein ?

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par d�faut
    Salut,

    tnntwister semble avoir � priori des probl�mes "d'import"....
    • Quelle est la version de python utilis�e?
    • Comment a-t-elle �t� install�e?
    • ...

    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [DOM] Parser XML avec DOM
    Par webrider dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 31/01/2008, 12h45
  2. [DOM4J] Parser un document XML avec DOM
    Par kroax dans le forum Format d'�change (XML, JSON...)
    R�ponses: 6
    Dernier message: 23/11/2007, 01h48
  3. Parser un fichier XML avec DOM
    Par Bayard dans le forum G�n�ral Python
    R�ponses: 1
    Dernier message: 02/11/2007, 20h44
  4. parser un fichier xml avec dom
    Par cilies38 dans le forum Modules
    R�ponses: 2
    Dernier message: 04/03/2007, 21h12
  5. [DOM] [D�butant(e)] Modifier un fichier XML avec DOM
    Par macks dans le forum Format d'�change (XML, JSON...)
    R�ponses: 6
    Dernier message: 05/07/2005, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo