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

XSL/XSLT/XPATH XML Discussion :

[XPATH] ordre de sélection


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut [XPATH] ordre de sélection
    Bonjour,

    j'ai le fichier XML suivant :

    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
    <HorizStruct total="7" prof="2">
          <Variable valeur="Last colo" shortValue="">
             <Cas ID="1" shortValue="" />
             <Label valeur="Last colonoscopy &lt;= 2 yrs" shortValue="">
                <Variable valeur="Control" shortValue="">
                   <Cas ID="2" shortValue="">Adequate control</Cas>
                   <Cas ID="3" shortValue="">Poor control</Cas>
                </Variable>
             </Label>
             <Label valeur="Last colonoscopy &gt; 2 yrs" shortValue="">
                <Variable valeur="Control" shortValue="">
                   <Cas ID="4" shortValue="">Adequate control</Cas>
                   <Cas ID="5" shortValue="">Poor control</Cas>
                </Variable>
             </Label>
             <Cas ID="6" shortValue="Last colonoscopy &gt; 2 yrs">Last colonoscopy &lt;= 2 yrs</Cas>
             <Cas ID="7" shortValue="">Last colonoscopy &gt; 2 yrs</Cas>
          </Variable>
       </HorizStruct>
    et je veux récupérer tous les attributs ID des noeud Cas dans l'ordre d'apparition sous l'arbre donc : 1, 2, 3, 4, 5, 6, 7

    La récupération se fait par un XPath (dans un programme java avec dom4J probablement pas la dernière...). J'en ai essayé plusieurs de XPath dont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //HorizStruct//Cas
    //HorizStruct/descendant::Cas
    //HorizStruct//*[self::Cas]
    Tous me retourne les identifiants mais dans l'ordre suivant :
    1, 6, 7, 2, 3, 4, 5... donc dans l'ordre mais par profondeur...

    Comment faire ? Est-ce lier à dom4J ?

    Merci d'avance pour le coup de pouce !

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Je ne pense pas qu'il puisse y avoir une solution en une seule requête XPath...

    Par une transformation XSL, on peut faire un parcours en profondeur d'abord pour obtenir une chaine de caractères avec les ID dans l'ordre souhaité...

  3. #3
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    //*/Cas ?

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,
    Citation Envoyé par cdespont Voir le message
    Comment faire ? Est-ce lier à dom4J ?
    Effectivement, le résultat est anormal : /HorizStruct/descendant::Cas devrait retourner les Cas suivant un parcours en préordre de l'arbre, et donc par ordre croissant d'ID.

    Maintenant, avant d'incriminer l'implémentation XPath de dom4j, assure-toi d'abord que le problème ne vient pas plutôt du code qui exploite le résultat de la requête XPath.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut ordre de sélection
    C'était vérifié... comme voici :

    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
       <HorizStruct total="7" prof="2">
          <Variable valeur="Last colo" shortValue="">
             <Cas ID="1" shortValue="" />
             <Label valeur="Last colonoscopy &lt;= 2 yrs" shortValue="">
                <Variable valeur="Control" shortValue="">
                   <Cas ID="2" shortValue="">Adequate control</Cas>
                   <Cas ID="3" shortValue="">Poor control</Cas>
                </Variable>
             </Label>
             <Label valeur="Last colonoscopy &gt; 2 yrs" shortValue="">
                <Variable valeur="Control" shortValue="">
    			   <Cas ID="4" shortValue="">Adequate control</Cas>
                   <Cas ID="5" shortValue="">Poor control</Cas>
                </Variable>
             </Label>
             <Cas ID="6" shortValue="Last colonoscopy &gt; 2 yrs">Last colonoscopy &lt;= 2 yrs</Cas>
             <Cas ID="7" shortValue="">Last colonoscopy &gt; 2 yrs</Cas>
          </Variable>
       </HorizStruct>
    Et le code de vérification :

    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
    25
        public static void main(String[] args)
        {
        	SAXReader reader = new SAXReader();
    		org.dom4j.Document chapterDoc;
    		org.dom4j.Element rootChapterDoc;
     
    		try 
    		{
    			chapterDoc = reader.read("Projects/Chapter7.xml");
    			rootChapterDoc = chapterDoc.getRootElement();
    			String path = "//HorizStruct/descendant::Cas";
    			java.util.List childListHorizStructCas = rootChapterDoc.selectNodes(path);
     
     
    			for(Iterator i = childListHorizStructCas.iterator(); i.hasNext(); )
    			{
    				System.out.println(((org.dom4j.Element)i.next()).attributeValue("ID"));
    			}
    		} 
    		catch (Exception ex) 
    		{
    			// TODO Auto-generated catch block
    			ex.printStackTrace();
    		}
        }
    Et le résultat :
    1
    6
    7
    2
    3
    4
    5

    Et pour le //*/Cas c'est le même problème.

    Avez-vous d'autres idées ?

  6. #6
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    c'est pas car tu as une balise Variable contenant toutes les balises ???
    Essaye :
    //HorizStruct/Variable/descendant::Cas ??

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    non //HorizStruct//Variable/Cas donne le même résultat

  8. #8
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    essaye de mettre au meme niveau toutes les balises CAS

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Alors ça c'est pas une option Ce fichier XML a une sémantique et le fait que ce soit arborescent c'est pas "juste pour rigoler"...

  10. #10
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    oui je me doute mais pour des raisons de faciliter il vaut mieux que les mêmes balises soient au même "étage" ors dans ton doc ce n 'est pas le cas .....
    maintenant si tu ne peux pas modifier le doc xml hé ben .......... ........

Discussions similaires

  1. ORDER BY ordre de sélection WHERE ? Possible ?
    Par frakosun dans le forum Requêtes
    Réponses: 8
    Dernier message: 12/03/2010, 14h12
  2. Ordre de sélection de cellules
    Par shadok6 dans le forum Excel
    Réponses: 2
    Dernier message: 16/10/2008, 13h48
  3. [XPath] Problème de sélection
    Par zserdtfg dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/09/2006, 14h57
  4. Ordre de sélection des lignes sur une table DB2
    Par Pierre Formosa dans le forum DB2
    Réponses: 1
    Dernier message: 26/04/2006, 20h03
  5. [XPath] Problème de sélection de noeuds
    Par Heriquet dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/02/2006, 10h22

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