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 :

Rassembler plusieurs éléments dans les attributs d'un unique élément


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Rassembler plusieurs éléments dans les attributs d'un unique élément
    Bonjour,
    Je viens vous faire part de mon problème qui est pour un moi vrai casse-tête.

    J'ai dans mon XML de départ, des données qui sont structurées de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Element Type="Max" >
    <Data Name="01-01" Value="1.5" />
    <Data Name="01-02" Value="2.5" />
    <Data Name="01-03" Value="3.5" />
    <Data Name="01-04" Value="4.5" />
    </Element>
    J'aimerais obtenir un XML en sortie, rassemblant toutes mes données contenues dans <Data/>, dans une seule balise <Element/>, comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Element Type="Max" 01-01 ="1.5" 01-02 ="2.5"  01-03 ="3.5" />
    J'ai donc tenter dans mon document XSLT de faire un template qui écrit cette ligne, à chaque occurence de "element".
    Seulement, je n'arrive pas mémoriser les valeurs de chaque Data pour les écrire en une seule ligne... Voici mon code, cela sera peut-être plus explicite :

    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
     
    <xsl:template match="/.../Element">
    	<xsl:for-each select="Data">
    		<xsl:variable name="01-01">
    			<xsl:if test="@Name='01-01'">
    				<xsl:value-of select="@Value"/>
    			</xsl:if> 
    		</xsl:variable>	
     
     		<xsl:variable name="01-02">
    			<xsl:if test="@Name='01-02'">
    				<xsl:value-of select="@Value"/>
    			</xsl:if>
    		</xsl:variable>
     
    		<xsl:if test="$01-01 != '' and $01-02 != '' ">
    			<Element>
    				<xsl:attribute name="$01-01"><xsl:value-of select="$01-01"/></xsl:attribute>
    				<xsl:attribute name="01-02"><xsl:value-of select="$01-02"/></xsl:attribute>
    			</Element>
    		</xsl:if> 				
    	</xsl:for-each>
    </xsl:template
    Evidemment ce n'est pas fonctionnel, étant donné qu'à chaque passage de boucle for-each, une des deux variable est reinitialisée à vide, et donc la condition ($01-01 != ' ' and $01-02 != ' ') n'est jamais remplie.
    J'ai beau tourner le problème dans tous les sens, je n'arrive pas à m'en sortir, je suis toujours confronté à un problème sur l'étendue de ma variable...
    Je ne trouve pas non plus de solution en utilisant param et with-param...

    Merci pour votre aide.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Pour information les noms XML ne peuvent pas commencer par un chiffre. Ton exemple avec 01-01 comme nom d'attribut ou de variable, ne peut donc pas marcher.
    Mais là n'est pas la question.

    Pour information aussi, ce que tu cherches à faire est sûrement une mauvaise idée. Lire une liste d'éléments fils de même nom est facile. Lire une liste d'attributs de noms différents est compliqué.
    Mais là n'est pas la question non plus.

    Ton code manque de logique. Tu fais un <xsl:for-each> sur <Data>, puis ensuite plein de <xsl:if> pour vérifier si tu es dans tel ou tel Data.
    Ça n'a pas de sens. Si tu ne t'intéresses qu'à un <Data> précis, il faut aller chercher celui-là précisément, et aucun autre. Pas de <xsl:for-each> donc.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="d01-01" select="Data[@Name = '01-01']/@Value"/>

Discussions similaires

  1. [DOM] Entités dans les attributs d'un XML généré par DOM
    Par angelinemm dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/05/2008, 09h26
  2. Réponses: 1
    Dernier message: 01/07/2006, 11h18
  3. [XSL~FO][FOP] variables possibles dans les attributs de tags ?
    Par lebechen dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/06/2006, 09h17
  4. Réponses: 2
    Dernier message: 21/09/2005, 12h18
  5. copier les attributs d un nouvel élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/09/2004, 10h05

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