Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1610 connectés 

 


Dernière réponse
Sujet : [ XPath ] problème de détection d'un attribut.
TBone :heink: en effet, j'ai une erreur cette fois.
comment ai-je testé ça encore ? j'ai fait un simple copier-coller...  :heink:  
 
bah. c'est résolu. merci pour les ezplications :jap:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
TBone :heink: en effet, j'ai une erreur cette fois.
comment ai-je testé ça encore ? j'ai fait un simple copier-coller...  :heink:  
 
bah. c'est résolu. merci pour les ezplications :jap:
chocoboy c'est bizarre que ton code :
 

Code :
  1. <xsl:value-of select="parent::node()/parent::node()/col_info[position() = position(self::node())]/@align"/>

 
 
ne te retourne pas d'erreur, la fonction position() ne doit pas posséder d'arguments

chocoboy si tu veux utiliser position, remplaces ton XSL :
 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2.   <xsl:stylesheet
  3.    version="1.0"
  4.    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5.   <xsl:template match="/table">
  6.   <html>
  7.   <body>
  8.   <table>
  9.    <xsl:apply-templates select="line" />
  10.   </table>
  11.   </body>
  12.   </html>
  13.   </xsl:template>
  14.  
  15.   <xsl:template match="line">
  16.    <tr>
  17.      <xsl:apply-templates select="col" />
  18.    </tr>
  19.   </xsl:template>
  20.  
  21.   <xsl:template match="col">
  22.    <xsl:variable name="pos">
  23.     <xsl:value-of select="position()" />
  24.    </xsl:variable>
  25.    <td>
  26.     <xsl:attribute name="align">
  27.      <xsl:value-of select="/table/col_info[position()=$pos]/@align" />
  28.     </xsl:attribute>
  29.     <para>
  30.      <xsl:value-of select="para" />
  31.     </para>
  32.    </td>
  33.   </xsl:template>
  34.  
  35.   </xsl:stylesheet>


 
c'est équivalent à l'autre code...
 
ton code à toi ne marche pas, car une fois que tu es dans le noeud /table/col_info, tu ne peux pas récupérer la position du noeud col, à moins de le conserver en variable ou en paramètre :
 
ici, je suis dans le noeud col et je garde sa position dans le paramètre $pos

Code :
  1. <xsl:variable name="pos">
  2. <xsl:value-of select="position()" />
  3. </xsl:variable>


maintenant, je ne suis plus dans le noeud col puisque je considère /table/col_info, donc position() me renvoie ma position dans /table/col_info et à moi de la comparer avec celle que j'avais stocké dans $pos :

Code :
  1. <xsl:value-of select="/table/col_info[position()=$pos]/@align" />


 :D

TBone le code XSL transformant la table et sur le premier post.
il est juste placé dans <xsl:template match="col">
 
et ce template est bien détecté car il me crée les 'td' (donc 'col' est bien le noeud courant),  c'est juste que la requête XPath du value-of ne ramène rien. (il n'y a pas d'erreur de syntaxe sinon il le dirait)
 
en fait, je crois que c'est 'self::' qui est décalé...
chocoboy ben donne tout ton code...
ça dépend du noeud ou tu te trouves...
faut faire gaffe avec les paramètres en xpath
TBone j'allais justement répondre. j'allais dire "Yes, Thanks" :)
 
cela étant, je ne comprends tjs pas pourquoi mon code ne passait pas  :sweat:  
 
mais ma page XSL avance :D
chocoboy alors ça a résolu ton problème ?
TBone :ouch:  
 
j'essaie de swit! :D
merci :jap:
pudaipiai hello,
 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <?xml-stylesheet type="text/xsl" href="essai.xsl"?>
  3. <table>
  4.   <col_info align="left"/>
  5.   <col_info align="right"/>
  6.   <line>
  7.      <col><para>blabla</para></col>
  8.      <col><para>blibli</para></col>
  9.   </line>
  10. </table>


 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <xsl:stylesheet
  3. version="1.0"
  4. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5. <xsl:template match="/table">
  6. <html>
  7. <body>
  8. <table>
  9. <xsl:apply-templates select="line" />
  10. </table>
  11. </body>
  12. </html>
  13. </xsl:template>
  14. <xsl:template match="line">
  15. <tr>
  16.    <xsl:apply-templates select="col" />
  17. </tr>
  18. </xsl:template>
  19. <xsl:template match="col">
  20. <xsl:variable name="num">
  21.   <xsl:number count="col" />
  22. </xsl:variable>
  23. <td>
  24.   <xsl:attribute name="align">
  25.    <xsl:value-of select="/table/col_info[0+$num]/@align" />
  26.   </xsl:attribute>
  27.   <para>
  28.    <xsl:value-of select="para" />
  29.   </para>
  30. </td>
  31. </xsl:template>
  32. </xsl:stylesheet>


 
ça te plaît comme ça ?  :D

TBone en tapant tout ça, je me suis rendu compte d'une erreur:
ça me paraît plus correct comme ça:

Code :
  1. <xsl:value-of select="parent::node()/parent::node()/col_info[position() = position(self::node())]/@align"/>


 
mais ça ne fonctionne pas plus. :/

TBone 'soir,
 
j'ai un petit souci avec une requête XPath à placer dans une page XSL...
 
je dois transformer un vieux document SGML en XML maison...
 
SGML à transformer:
 

Code :
  1. <table>
  2.    <col_info align="left"/>
  3.    <col_info align="right"/>
  4.    <line>
  5.       <col><para>blabla</para></col>
  6.       <col><para>blabla</para></col>
  7.    </line>
  8. </table>


 
doit devenir en XML:
 

Code :
  1. <table>
  2.    <tr>
  3.       <td align="left"><para>blabla</para></td>
  4.       <td align="right"><para>blabla</para></td>
  5.    </tr>
  6. </table>


 
j'ai écrit ceci:

Code :
  1. <td>
  2.   <xsl:attribute name="align">
  3.     <xsl:value-of select="parent::node()/parent::node()/col_info[position() = self::node()[position()]]/@align"/>
  4.   </xsl:attribute>
  5.   <xsl:apply-templates/>
  6. </td>


 
étant donné que le col en première position se réfère au col_info  en première position, le 2ème au 2ème et ainsi de suite...
 
(oui, ce SGML est pourri :D )
 
ma requête ne rapporte aucun résultat...
d'où ma question... est-ce que le self::node() pointe toujours sur l'élément courant càd le //col en cours ?
 
:jap:


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR