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 :

Exploration d'un noeud de navigation en utilisant des valeurs du premier noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut Exploration d'un noeud de navigation en utilisant des valeurs du premier noeud
    Bonjour,

    Je dois extraire des données contenues dans 2 noeuds différents.
    Mon premier noeud définit pour chaque paramètre un ID. Mon second noeud contient les données relatives à chacun des paramètres recherchés mais identifiés par leur ID. Etant donné que l'ID peut être amené à changer, je souhaite, à chaque extraction, créer une "table" de la liste de mes ID puis extraire les données.
    Etant donné que le deuxième noeud n'affiche que l'id du paramètre recherché, je suis obligé de passer par une extraction en deux étapes afin de ne pas reboucler sur le noeud des features à chaque fois que je veux extraire les données d'un product, et donc réduire les temps de traitement.

    Noeud 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Feature>
      <FeatureDefinition>
        <id>123456</id>
        <label>Mon paramètre</label>
      </FeatureDefinition>
      <FeatureDefinition>
         ...
      </FeatureDefinition>
    </Feature>
    Le deuxième noeud contenant les données est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Products>
      <Product>
        <Features>
          <FeaturesValue>
            <id>123456</id>
            <value>Valeur de mon feature</value>
          </FeaturesValue>
          <FeaturesValue>
            ...
          </FeaturesValue>
        </Features>
      </Product>
    </Products>
    Dans un premier temps, j'ai essayé de créer des variables globales pour mapper chacun de mes paramètres recherchés avec l'id correspondant. Cependant, je me suis rendu compte que les variable globales n'existent pas en XSLT et que je ne pouvais pas accéder au variable que j'alimentais dans l'exploration du premier noeud de navigation.

    Du coup je ne vois pas encore quelle solution je peux envisager. Si quelqu'un a une idée pour m'aider à démarrer sur la résolution de ce problème je suis preneur.

    Merci par avance pour votre aide.

    Thibault

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par tus01 Voir le message
    Je dois extraire des données contenues dans 2 noeuds différents.
    Mon premier noeud définit pour chaque paramètre un ID. Mon second noeud contient les données relatives à chacun des paramètres recherchés mais identifiés par leur ID. Etant donné que l'ID peut être amené à changer, je souhaite, à chaque extraction, créer une "table" de la liste de mes ID puis extraire les données.
    Ce genre de structures relationnelles ne sont pas très adaptées au XML, et c'est une mauvaise idée à moins qu'elles servent vraiment à quelque chose (ce qui n'est pas le cas dans ton exemple, qui est peut-être trop simplifié pour illustrer l'utilité de la chose.)

    Citation Envoyé par tus01 Voir le message
    Cependant, je me suis rendu compte que les variable globales n'existent pas en XSLT et que je ne pouvais pas accéder au variable que j'alimentais dans l'exploration du premier noeud de navigation.
    Pas tout-à-fait vrai, en guise de variable globale tu peux déclarer une clé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:key name='features' match='FeatureDefinition' use='id'/>
    Puis pour récupérer une FeatureDefinition à partir de son id :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="key('features', $id)/label"/>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    En fait je n'ai pas la main sur la structure du fichier XML que j'exploite, je dois simplement le traiter pour afficher les informations que je souhaite (il y a à peu près 30 paramètres qui sont générés et je n'en utilise que 10).

    La structure du fichier XML est la suivante:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <Header>
    	<Controls>
    		<ControlModel>
    			<Feature>
    			  <FeatureDefinition>
    				<id>123456</id>
    				<label>Mon paramètre</label>
    			  </FeatureDefinition>
    			  <FeatureDefinition>
    				 ...
    			  </FeatureDefinition>
    			</Feature>
    		<ControlModel>
    	</Controls>
    </Header>
    <Zones>
    	<Zone>
    		<Controls>
    			<ControlModel>
    				<Products>
    					<Product>
    					<Features>
    					  <FeaturesValue>
    						<id>123456</id>
    						<value>Valeur de mon feature</value>
    					  </FeaturesValue>
    					  <FeaturesValue>
    						...
    					  </FeaturesValue>
    					</Features>
    				  </Product>
    				</Products>
    			</ControlModel>
    		</Controls>
    	</Zone>
    </Zones>
    On a donc bien 2 noeuds différents à parcourir. Mes produits sont dans le deuxième noeud. Pour afficher par exemple l'attribut libellé, étant donné que je n'ai que l'id de cette propriété dans mon noeud produit, je dois parcourir le premier noeud pour savoir quel est son id. Du coup, lorsque je parcourerai mon noeud de produit, je saurais quel sera l'élément à afficher si je connais son id.

    Je ne vois pas trop comment l'utilisation de l'attribut key peu m'aider à implémenter mon extracteur, puisqu'il se base sur l'ID mais je ne connais pas l'id que je recherche, seulement la valeur texte de mon attribut... Je ne sais pas si j'ai été assez clair dans les explications de mon premier post...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par tus01 Voir le message
    Je ne vois pas trop comment l'utilisation de l'attribut key peu m'aider à implémenter mon extracteur, puisqu'il se base sur l'ID mais je ne connais pas l'id que je recherche, seulement la valeur texte de mon attribut...
    Je croyais que c'était l'inverse... Du coup un mapping global est moins utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:key name='features' match='FeatureDefinition' use='label'/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="FeaturesValue[id = key('features', 'le label que je veux')/id]">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    Merci

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

Discussions similaires

  1. [MySQL] Utilisation des valeur choix multiple pour executer une requete une valeur a la fois
    Par guigui69 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/12/2007, 16h43
  2. Utiliser des valeur de cellule dans un userform
    Par swissmade dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/07/2007, 19h38
  3. [inputdlg] Utilisation des valeurs retournées
    Par jenfree dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/05/2007, 21h02
  4. [SQL] Utilisation des valeurs de Checkbox
    Par jenovah dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 16/04/2007, 14h58
  5. [displaytag] Utilisation des valeurs de la ligne courante
    Par ADIDASman dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/11/2005, 13h43

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