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 :

[minidom] Mauvais parsage


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut [minidom] Mauvais parsage
    Bonjour à tous,

    j'utilise python depuis hier et j'ai aujourd'hui un petit soucis avec un document xml que je n'arrive pas à parser.

    Le document est ainsi

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?xml version='1.0' encoding='UTF-8'?>
    <backup_domains>
    	<domain>
    		<name>test pool</name>
    		<ftp>
    			<host>192.168.1.165</host>
    			<user>www-data</user>
    			<passwd>*****</passwd>
    			<startpath>/var/www/test</startpath>
    		</ftp>
    		<mysql>
    		</mysql>
    	</domain>
    </backup_domains>

    J'ai bien vérifié et il n'y a pas d'espace superflu. Pas d'erreur de syntaxe non plus. Que se passe-t'il pour que lorsque je cherche à récupérer les nodes "domain" et plus particulierement "domain/name", python me sorte que domain est un text node??

    Je fais comme ça

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>>cfg_xml = xml.minidom.parse(path_to_config_file)
    >>>cfg_doc = cfg_xml.documentElement
    >>>domainsNode = cfg_doc.childNodes
    >>>domainsNode
    [<DOM Text node "u'\n\t'">, <DOM Element: domain at 0x2695440>, <DOM Text node "
    u'\n'">]

    Merci de votre aide.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Non, regarde bien, il te dit que c'est une liste à trois éléments, celui qui t'intéresse est au milieu

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Pardon de répondre si tard.

    Je suis désolé modo, mais je n'ai vraiment pas compris ta réponse!

    Une liste trois éléments? Que veux-tu dire?
    Merci.

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour odissey,

    j'ai exactement le même problème que toi !
    La solution que j'ai trouvé provisoirement :
    - supprimer les retours à la ligne et les espaces dans toute ma chaine XML sauf pour la première ligne (c'est pas terrible, mais dans mon cas il n'y a aucun espace dans les valeurs des champs, c'est un cas particulier).

    J'étais justement à la recherche d'une solution quand je suis tombé sur ton message. J'ai peut-être une idée : utiliser les expressions régulières pour supprimer les retours à la ligne et les espaces ENTRE les champs. C'est une idée, faut voir ce que ça vaut.

    Bon j'pensais justement poster un message sur le forum pour voir ça
    Je te tiens au courant si j'ai du nouveau

    Glipper

    ps : ce que j'utilise actuellement :
    bufferXml = bufferXml.replace('\n', '').replace('\t', '').replace(' ', '')
    mais c'est pas une bonne solution

  5. #5
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Salut,

    ta variable domainsNode contient l'ensemble du noeud <backup_domains> soit:
    • un noeud texte (un saut de ligne et une tabulation)
    • un noeud de type domain
    • un noeud texte (un saut de ligne)

    Je te conseille d'essayer elementtree, c'est beaucoup plus pythonique que minidom.

    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
    18
    19
    20
    21
    22
    23
    24
    from xml.etree import ElementTree as ET
     
    xml = """<?xml version='1.0' encoding='UTF-8'?>
    <backup_domains>
            <domain>
                    <name>test pool</name>
                    <ftp>
                            <host>192.168.1.165</host>
                            <user>www-data</user>
                            <passwd>*****</passwd>
                            <startpath>/var/www/test</startpath>
                    </ftp>
                    <mysql>
                    </mysql>
            </domain>
    </backup_domains>
    """
     
     
    tree = ET.fromstring(xml)
     
    for domain in tree.getiterator('domain'):
        for element in domain.getiterator():
            print "%s:\t %s" % (element.tag, element.text)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    domain:	 
     
    name:	 test pool
    ftp:	 
     
    host:	 192.168.1.165
    user:	 www-data
    passwd:	 *****
    startpath:	 /var/www/test
    mysql:

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci à vous tous pour vos réponses.

    J'ai testé vos deux solutions, elles conviennent parfaitement, mais c'est vrai que c'est bien plus simple d'utiliser elementTree.

    L'origine du problème est sûrement un soucis d'encodage... Je ne sais pas ce que vous en pensez.
    Bonne journée à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mauvais indicateur de connection
    Par calvin dans le forum Hibernate
    Réponses: 15
    Dernier message: 24/05/2004, 12h03
  2. [parsage] SAX ou DOM ?
    Par sixkiller dans le forum APIs
    Réponses: 4
    Dernier message: 10/05/2004, 10h40
  3. [Tomcat][JSP] Mauvais fonctionnement
    Par gandalf_le_blanc dans le forum Tomcat et TomEE
    Réponses: 47
    Dernier message: 26/04/2004, 13h07
  4. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 07h27
  5. mauvais code
    Par moumou dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 17/04/2003, 15h56

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