Ou est le probleme avec ce bout de XSL ?

Ou est le probleme avec ce bout de XSL ? - XML/XSL - Programmation

Marsh Posté le 04-05-2004 à 18:42:24    

Grace a une feuille XSL, je cherche a transformer du XML en HTML, qui aura une forme de table avec une colonne "label" et une colonne "donnee".  
 
Pour faire les choses proprement, j'ai cree un template "item" a qui je passe je lui passe mon label et ma valeur, et lui se charge de creer les <TR>, <TD>, etc. Un appel a "item" ressemble donc a :
 

Code :
  1. <xsl:call-template name="item">
  2. <xsl:with-param name="name" select="'Compte CLient"/>
  3. <xsl:with-param name="value"><xsl:attribute name="select">'<xsl:value-of select="Account/Id"/> - <xsl:value-of select="Account/Description"/>'</xsl:attribute></xsl:with-param>
  4. </xsl:call-template>


 
Xalan se plaint que l'attribut "select" a un attribut illegal (en rouge dans l'exemple qui precede) ... quelqu'un aurait une idee ?
 

Code :
  1. SystemId Unknown; Line 102; Column 59; select has an illegal attribute: {1}


 
EDIT : merde le rouge marche pas :(


Message édité par Gonzoide le 04-05-2004 à 18:42:56
Reply

Marsh Posté le 04-05-2004 à 18:42:24   

Reply

Marsh Posté le 05-05-2004 à 09:53:55    

As tu essayé sans apostrophe dans l'attribut select de ton premier <xsl:with-param> ou en placant la valeur "'Compte CLient" comme texte dans cet élément au lieu de le mettre en attribut ?

Code :
  1. <xsl:with-param name="name">'Compte CLient</xsl:with-param>


Reply

Marsh Posté le 05-05-2004 à 11:00:38    

swgreedo a écrit :

As tu essayé 1) sans apostrophe dans l'attribut select de ton premier <xsl:with-param> ou 2) en placant la valeur "'Compte CLient" comme texte dans cet élément au lieu de le mettre en attribut ?

Code :
  1. <xsl:with-param name="name">'Compte CLient</xsl:with-param>




 
1) Oui, au depart c'etait meme sans apostrophe ... je pensais meme que le probleme venait de la, puisque si tu resous l'attribute ca se transforme en un parametre "value" qui vaut "123456 - compte client" par exemple, ce qui est interdit (il faut de apostrophes pour signaler que c'est bien une chaine, et pas un noeud)
 
2) Ben d'apres le numero et ligne et de colonne, c'est vraiment le :

Code :
  1. <xsl:value-of select="Account/Id"/> - <xsl:value-of select="Account/Description"/>

qui lui pose probleme, donc j'ai pas change le premier param (au passage il manque une apostrophe dans "'Compte CLient", mais c'est juste une typo de recopie quand j'ai change les noms des champs pour poster). Mes deux noeuds "Account/Id" et "Account/Description" sont valides.


Message édité par Gonzoide le 05-05-2004 à 11:01:48
Reply

Marsh Posté le 05-05-2004 à 11:13:38    

Ah ben là je ne vois pas   :(

Reply

Marsh Posté le 06-05-2004 à 11:27:43    

swgreedo a écrit :

Ah ben là je ne vois pas   :(


 
essaie de changer les noms de tes param. Je ne pense pas qu'il soit conseillé d'appeller une variable par le nom d'une fonction (en l'occurence, name).
 

Reply

Marsh Posté le 06-05-2004 à 12:20:50    

alien_nan a écrit :

essaie de changer les noms de tes param. Je ne pense pas qu'il soit conseillé d'appeller une variable par le nom d'une fonction (en l'occurence, name).


 
Ben je vais esssayer a tout hasard, meme si j'y crois pas trop (quand le parametre "value" est initialise de maniere simple, ca marche)

Reply

Marsh Posté le 06-05-2004 à 14:19:48    

Gonzoide a écrit :

Ben je vais esssayer a tout hasard, meme si j'y crois pas trop (quand le parametre "value" est initialise de maniere simple, ca marche)


 
as tu essayé de remplacer le - par & # 4 5 ;  ?
quel est l'encoding de ton fichier ?
 
ps : edit c chiant, il transforme en - le code ...


Message édité par alien_nan le 06-05-2004 à 14:21:46
Reply

Marsh Posté le 06-05-2004 à 14:44:07    

A priori en changeant une construction du type :  

Code :
  1. <xsl:with-param name="value">
  2.   <xsl:attribute name="select'<xsl:value-of select="Account/Id"/> - <xsl:value-of select="Account/Description"/></xsl:attribute>
  3. </xsl:with-param>


 
en directement :

Code :
  1. <xsl:with-param name="value"><xsl:value-of select="Account/Id"/> - <xsl:value-of select="Account/Description"/></xsl:with-param>


 
ca a l'air de marcher (en gros, on vire l'attribut "select" de "with-param".
 
Par contre, maintenant ca merde plus loin ... le bout de code suivant pète avec le message d'erreur 'Value of attribute name cannot contain '<', alors que ca me semble tout a fait legal. Le plus drôle c'est que ca marchait pile-poil avant.

Code :
  1. <xsl:attribute name="name">index<xsl:value-of select="position()"/></xsl:attribute>


Message édité par Gonzoide le 06-05-2004 à 14:45:13
Reply

Marsh Posté le 06-05-2004 à 14:52:02    

C'est normal, le contenu texte de xsl:attibute est pris comme la valeur brut de l'attribut. Un peu comme xsl:text


Message édité par pascal34 le 06-05-2004 à 14:54:18
Reply

Marsh Posté le 06-05-2004 à 22:53:27    

pascal34 a écrit :

C'est normal, le contenu texte de xsl:attibute est pris comme la valeur brut de l'attribut. Un peu comme xsl:text


 
Ben avant que je commence a faire mes essais avec  mes xsl:with-param, les xsl:attributes marchaient pile-poil :??:
 
Pis t'es sur de ton coup ? Parce que a part ce que j'ai fait, comment passer des attibuts complexes ?  
 

Reply

Marsh Posté le 06-05-2004 à 22:53:27   

Reply

Marsh Posté le 07-05-2004 à 11:42:19    

Code :
  1. <xsl:with-param name="[nom param]">
  2. <xsl:value-of select="[un simple valeur texte ou un nodeset]"/>
  3. </xsl:with-param>


 
les xsl:attribute c'est pour ajouter un nouvel attribut à l'élément en cours de traitement dans un template.


Message édité par pascal34 le 07-05-2004 à 11:50:48
Reply

Marsh Posté le 07-05-2004 à 12:35:37    

pascal34 a écrit :

Code :
  1. <xsl:with-param name="[nom param]">
  2. <xsl:value-of select="[un simple valeur texte ou un nodeset]"/>
  3. </xsl:with-param>


 
les xsl:attribute c'est pour ajouter un nouvel attribut à l'élément en cours de traitement dans un template.


 
Ben c'est bizarre, parce que des structures du genre:

Code :
  1. <xsl:with-param name="[nom param]">
  2. du_textexsl:value-of select="[un simple valeur texte ou un nodeset]"/>du_texte<xsl:value-of select="[un simple valeur texte ou un nodeset]"/>
  3. </xsl:with-param>


ca fonctionne chez moi ...


Message édité par Gonzoide le 07-05-2004 à 12:36:05
Reply

Marsh Posté le 07-05-2004 à 13:44:49    

Gonzoide a écrit :

Ben c'est bizarre, parce que des structures du genre:

Code :
  1. <xsl:with-param name="[nom param]">
  2. du_textexsl:value-of select="[un simple valeur texte ou un nodeset]"/>du_texte<xsl:value-of select="[un simple valeur texte ou un nodeset]"/>
  3. </xsl:with-param>


ca fonctionne chez moi ...


 
Oui, car tu inclues du texte dans le xsl:param. Pas un xsl:attribute

Reply

Marsh Posté le 07-05-2004 à 16:26:18    

pascal34 a écrit :

Oui, car tu inclues du texte dans le xsl:param. Pas un xsl:attribute


 
Je confirme qu'on a le droit de le faire dans un attribute (ca marche dans d'autres XSL), c'est meme la raison d'etre de ce noeud ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed