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 :

Plusieurs attributs en même temps.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut Plusieurs attributs en même temps.
    Bonjour à tous,

    J'ai encore un problème .

    J'ai plusieurs attributs à renseinger mais j'ai du mal à prendre les valeurs.

    Bon je vous montre le code qui n’est pas vraiment compliqué je vous l’accorde, c’est juste des renseignements :

    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
    37
    38
    39
    40
    41
    42
     
    <mtask eiac="CATH_FC" lcn="A1AA015" alc="00" tasknum="05">
             <eiac>CATH_FC</eiac>
             <lcn>A1AA015</lcn>
             <alc>00</alc>
             <tasknum>05</tasknum>
             <tasklevel>O</tasklevel>
    </mtask>
     
     <mtask eiac="CATH_FC" lcn="A1AA120" alc="00" tasknum="10">
             <eiac>CATH_FC</eiac>
             <lcn>A1AA120</lcn>
             <alc>00</alc>
             <tasknum>10</tasknum>
             <tasklevel>H</tasklevel>
    </mtask>
     
    <msubtasklan eiac="CATH_FC" lcn="A1AA015" alc="00" tasknum="03" subtasknum="10" language="EN">
     
    <eiac>CATH_FC</eiac>
             <lcn>A1AA015</lcn>
             <alc>00</alc>
             <tasknum>03</tasknum>
             <subtasknum>10</subtasknum>
    </msubtasklan>
     
    <msubtasklan eiac="CATH_FC" lcn="A1AA015" alc="00" tasknum="05"       subtasknum="10" language="EN">
             <eiac>CATH_FC</eiac>
             <lcn>A1AA015</lcn>
             <alc>00</alc>
             <tasknum>05</tasknum>
             <subtasknum>10</subtasknum>
    </msubtasklan>
     
    <msubtasklan eiac="CATH_FC" lcn="A1AA015" alc="00" tasknum="05" subtasknum="20" language="EN">
             <eiac>CATH_FC</eiac>
     
             <lcn>A1AA015</lcn>
             <alc>00</alc>
             <tasknum>05</tasknum>
             <subtasknum>20</subtasknum>
    </msubtasklan>
    Je le résume brièvement pour que cela soit plus claire. Dans les balises <Mtask> on donne des informations sur des tâches.
    Dans les balises Msubtasklan on donne toutes les sous-tâche d’une tâche correspondante. Dans l’exemple là on a deux sous tâche pour la tâche 5 en l’occurrence subtasknum="10" et subtasknum="20".

    Je voudrais pour chaque balise Msubtaskan que je croise crée une balise sous-tâche. Dans cette balise il faudrait que je mette 3 attributs dedans ce qui me donnerait :
    - le numéro de la sous-tâche qui est directement renseigné dans Msubtasklan/Tasknum
    - le niveau de la tâche qui est se situe dans les informations d’une tâche donc dans Mtask/tasklevel. Il y aura deux attributs pour cette information. Si Tasklevel est égal à H on a dans les attributs tasklevelH=’1’ et tasklevelO=0. Si Tasklevel est égal à O on a tasklevelH=’0’ et tasklevelO=’1’

    Voilà ce que devrait donner le résultat si tout se passe bien :

    <subtask id=’10’ levelO=’1’ levelH=’0’>
    </subtask>
    <subtask id=’10’ levelO=’0’ levelH=’1’>
    </subtask>
    <subtask id=’20’ levelO=’0’ levelH=’1’>
    </subtask>

    Moi j’ai trouvé ça mais bon ça marche pas c'est une des nombreuses versions que j'ai testé.
    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
     
                             <xsl:attribute name="id">
    				<xsl:value-of select="./tasknum" />	
    				<xsl:variable name="tache" select="./tasknum"/>
    			</xsl:attribute>
     
    			<xsl:attribute name="olevel">		
    			<xsl:variable name="tache" select="./tasknum"/>
    			<xsl:if test="../mtask/tasknum='$tache'">
    				<xsl:variable name="level" select="../mtask/tasklevel"/>	
    				<xsl:choose>
    					<xsl:when test="$level='O'">
    				    	<xsl:value-of select="1" />
    				  	</xsl:when>
    				  	<xsl:when test="$level='H'">
    				    	<xsl:value-of select="0" />
    				  	</xsl:when>
    				</xsl:choose>		
    			</xsl:if>
    			</xsl:attribute>
     
    			<xsl:attribute name="ilevel">
    			<xsl:variable name="level" select="../mtask/tasklevel"/>		
    				<xsl:choose>
    					<xsl:when test="$level='O'">
    			    		<xsl:value-of select="0" />
    			  		</xsl:when>
    			  		<xsl:when test="$level='H'">
    			    		<xsl:value-of select="1" />
    			  		</xsl:when>
    				</xsl:choose>	
    			</xsl:attribute>

    2 jours que je suis sur ça j'en peux plus. Aidez-moi s'il vous plaît.

  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
    J'ai vu ce qui pourrait être considéré comme une faute de frappe : un appel à une variable encadré par des apostrophes...donc pas de substitution !

    Mettre plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="../mtask/tasknum=$tache">
    XSL-T est un tout avec ses fameuses variables constantes : il ne s'agit pas d'un langage de composition comme PHP où, là, il aurait fallu avec les apostrophes...
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    Merci alain je viens d'essayer en supprimant les quotes. Ca ne marche pas.

    J'ai essayé encore un autre code. Avec ce code je comprend pas pour olevel j'ai que des guillemets, y'a rien dedans.

    Voici le nouveau code :

    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
     
    <xsl:attribute name="olevel">		
    <xsl:for-each select="./tasknum">
    	<xsl:variable name="tache" select="."/>
    	<xsl:for-each select="../mtask">
    		<xsl:if test="./tasknum=$tache">
    			<xsl:variable name="level" select="./tasklevel"/>	
    			<xsl:choose>
    				<xsl:when test="$level='O'">
    			    	<xsl:value-of select="1" />
    			  	</xsl:when>
    			  	<xsl:when test="$level='H'">
    			    	<xsl:value-of select="0" />
    			  	</xsl:when>
    			</xsl:choose>		
    		</xsl:if>
    	</xsl:for-each>
    </xsl:for-each>
    </xsl:attribute>
    J'en peux plus.

  4. #4
    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 comprends pas la présence des xsl:for-each pour la création de l'attribut car il ne doit y avoir qu'une seule valeur à cet attribut.

    Là on ça ne peut pas marcher, déjà, c'est que le xsl:for-each va déplacer le noeud courant !

    Il faudrait donner la feuille de style complète pour mieux comprendre...
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    Attends je te fais en gros l'algorithme que j'ai mis en place avec ce code.

    Je crée l'attibut olevel
    Pour chaque tasknum on stock son numéro dans la variable tâche.
    On regade chaque task pour voir laquelle à le numéro de la variable tâche
    si ils ont le même numéro alors dans l'attribut on mets la valeur

    et ainsi de suite

    Les xsl for each ne servent sûrement à rien mais je suis déséspéré. J'essai tout ce que je trouve

  6. #6
    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
    A part l'histoire des apostrophes, la première version me plaisait pas mal... Il faut pouvoir jeter un coup d'oeil sur la feuille entière pour savoir si la vérité n'est pas ailleurs...
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    En faite ce code mets toujours la même valeur pour l'attribut olevel. J'ai l'impression qu'il prend la première valeur dans mtask. Puis voilà il mets tout le temps la même chose. Je sais pas pourquoi il bloque sur le premier

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    C'est bon j'ai eu le droit à de l'aide exterieur. Pour identifier tasklevel il ne fallait pas que tasknum il fallait aussi d'autres variables sans cela l'ordi ne se repère pas.
    Merci comme même de votre aide.

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

Discussions similaires

  1. détecter plusieurs messages en même temps
    Par yannickrohel dans le forum Windows
    Réponses: 5
    Dernier message: 20/02/2006, 23h17
  2. Rendre visible / invisible plusieurs éléments en même temps
    Par Bluespike62 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/01/2006, 17h43
  3. laisser cochés plusieurs TRadioButton en même temps.
    Par heider dans le forum Composants VCL
    Réponses: 5
    Dernier message: 25/12/2005, 14h15
  4. lecture de plusieurs port en même temps
    Par manaboko dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 15h26
  5. Réponses: 9
    Dernier message: 17/04/2004, 16h32

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