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 :

trouver les noeuds avec des valeurs nulles


Sujet :

Python

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut trouver les noeuds avec des valeurs nulles
    Bonjour,

    Je fais un pg qui parcoure un document xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <aixm:VORTimeSlice gml:id="ABB">
           <aixm:type>ABB</aixm:type>
                  <aixm:location>
                        <aixm:ElevatedPoint gml:id="ABB" srsDimension="2">
                              <gml:pos srsDimension="2">2.5 -4.2</gml:pos>
                              <aixm:elevation uom="M"></aixm:elevation>
                        </aixm:ElevatedPoint>
                  </aixm:location>
    </aixm:VORTimeSlice>
    Je veux identifier le tag aixm:elevation car il encadre une valeur nulle. Mais c'est le seul tag qui n'apparait pas dans mes traces.
    Mon pg est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def ApplicationWhitespaceRemoving(self,ele) :
       	for c in ele.childNodes: 
    	        if ele.nodeType == Node.TEXT_NODE : 
            		print ele.parentNode," >>> ",ele.nodeValue
        		for child in ele.childNodes :
            		self.ApplicationWhitespaceRemoving( child )
    J'obtiens les traces suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <DOM Element: aixm:VORTimeSlice at -0x482c5054>  >>>  
    <DOM Element: aixm:type at -0x482c5194>  >>>  ABB
    <DOM Element: aixm:VORTimeSlice at -0x482c5054>  >>>  
    <DOM Element: aixm:location at -0x482bb6d4>  >>>  
    <DOM Element: aixm:ElevatedPoint at -0x482bb674>  >>>  
    <DOM Element: gml:pos at -0x482bb534>  >>>  2.5 -4.2
    <DOM Element: aixm:ElevatedPoint at -0x482bb674>  >>>  
    <DOM Element: aixm:ElevatedPoint at -0x482bb674>  >>>  
    <DOM Element: aixm:location at -0x482bb6d4>  >>>  
    <DOM Element: aixm:VORTimeSlice at -0x482c5054>  >>>
    Je ne comprends vraiement pas comment faire.
    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    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 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    Je ne vois pas pourquoi vous utilisez une interface dom plutôt que xml.etree.
    Enfin pour votre question, relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	        if ele.nodeType == Node.TEXT_NODE : 
            		print ele.parentNode," >>> ",ele.nodeValue
    Ca dit que si le node est de type Texte alors on affiche le "parent".
    Comme "aixm:elevation" n'a pas de fils de ce type... on ne le voit pas
    - W
    PS: Oui mais les autres alors?
    C'est là que "dom" et "xml" ont peut être des différences qui tuent!
    car: <a><b>khqskjdhqs<b/><a/>
    n'est plus la même chose que:
    <a>
    <b>khqskjdhqs<b/>
    <a/>

    Dans un document "dom" les CRLF et autre TAB, SP deviennent Text et des fils qui vont faire marcher le "truc" (ele.parentNode).

  3. #3
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Bonjour,
    Je suis confiné sur la version Python 2.4.4 donc je n'ai pas xml.etree.
    Si je comprends bien la ligne <aixm:elevation> ne s'affiche pas car la valeur encadrée étant nulle, il n'y a pas de fils et donc pas de print du parent.
    Accessoirement, savez vous comment supprimez la ligne vide qui apparait aprés suppression du noeud <aixm:elevation> (faut t'il que je supprime aussi les text contenant les cr, tab etc frères du noeud à supprimer ?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <aixm:VORTimeSlice gml:id="ABB">
           <aixm:type>ABB</aixm:type>
                  <aixm:location>
                        <aixm:ElevatedPoint gml:id="ABB" srsDimension="2">
                              <gml:pos srsDimension="2">2.5 -4.2</gml:pos>
     
                        </aixm:ElevatedPoint>
                  </aixm:location>
    </aixm:VORTimeSlice>
    merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    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 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut

    Si je comprends bien la ligne <aixm:elevation> ne s'affiche pas car la valeur encadrée étant nulle, il n'y a pas de fils et donc pas de print du parent.
    Et oui...
    Mais le vrai problème est que vous ayez l'impression que çà "fonctionne" pour les autres nœuds de l'arbre dom.

    Accessoirement, savez vous comment supprimez la ligne vide qui apparait aprés suppression du noeud <aixm:elevation>
    Ce ne sont pas des 'lignes' mais les nœuds d'un arbre.
    Vous supprimez bien l'élément <aixm:elevation> qui est un fils de <aixm:ElevatedPoint>.
    Les caractères de contrôles sont d'autres "fils" de <aixm:ElevatedPoint>.

    Comment les traiter? Peut être en appliquant le traitement des "espaces" de la norme XML avant de convertir le texte en arbre.
    Dans les versions récentes on ne se pose même pas la question...
    - W

Discussions similaires

  1. UNIQUE index avec des valeurs null
    Par DeeVoiD dans le forum MySQL
    Réponses: 2
    Dernier message: 24/03/2009, 16h18
  2. [C#]Incohérence de where avec des valeurs nulles
    Par ClaudeBg dans le forum Linq
    Réponses: 4
    Dernier message: 20/02/2009, 18h59
  3. Création d'un graphique OWC avec des valeurs nulles/vides
    Par SorrowLane dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/07/2008, 14h37
  4. Trouver un noeud avec la valeur de l'attribut
    Par Kimahri01 dans le forum XML
    Réponses: 0
    Dernier message: 08/05/2008, 11h08
  5. Réponses: 4
    Dernier message: 29/08/2007, 16h01

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