[XSL /XSLT]chaine de caractere...decoupage...recupé ration des valeurs

chaine de caractere...decoupage...recupé ration des valeurs [XSL /XSLT] - XML/XSL - Programmation

Marsh Posté le 23-07-2004 à 10:30:26    

SAlut
 
j ai une source XL qui possède un new du type:

Code :
  1. <CP>168</CP>
  2. ....
  3. <CP>145 156 26</CP>


 
Mon fichier XSL permet de récupérer les valeurs des CP et de les afficher. les valeurs CP sont des numéros de fichiers xml qui me sont nécessaire lors de création de lien dans ma page...
 
Pour un <CP> dans lequel il y au une valeur il n'y a aucun probleme:
 
le lien se genère sans probleme.
 
Pour un <CP> avec plusieurs valeurs de CP ca coince car comme je recupere la valeur du noeud CP à la creation du lien il me colle tout la chaine de caractere et ma valeur CP au lieu d' etre une valeur pour chaque numéro est la chaine de cara comprise dans mon noeud  
 
En résumé:
quand nbr CP = 1 :
 
http://....repertoire=XML/con_pra/ [...] a.xsl&sel=286 <= valeur du CP
 
quand nbr CP > 1 :
http://....repertoire=XML/con_pra/ [...] a.xsl&sel=281 282 <= valeur de la chaine de cara du noeud
 
Tout cette partie est dans une boucle for each ... par conséquent je voudrais que lorsque nbr CP > 1 il me prene chaque valeur de la chaine...
 
J'ai vu qu il existait une fonction XSLT normalize-sapce(chaine) mais cela ne ferait que suprimer les espaces de la chaine et me mettre dans le caca encore plus  :lol:  
 
Si quelqu'un a une idee sur la question ... Sain clou d'avance :hello:

Reply

Marsh Posté le 23-07-2004 à 10:30:26   

Reply

Marsh Posté le 23-07-2004 à 10:45:50    

la structure de ton fichier XML est mal faite, dès le départ il faut mettre un code par balise CP

Reply

Marsh Posté le 23-07-2004 à 10:58:51    

Ben je sais bien mais je fais avec ce qu'on me donne ...Je dois me demerdez avec le client ...
J'ai plus de 2500 fiches xml alors si je pouvais refaire le code tu penses bien que je n aurais pas posté et poser la question ...


Message édité par baygon le 23-07-2004 à 10:59:38
Reply

Marsh Posté le 23-07-2004 à 11:11:42    

essaye d'utiliser les fonction "substring-after()" et "substring-before()" dans une fonction récursive
regarde aussi les autres fonctions qui sont sur la page suivante, ca pourra peut-être te servir
http://www.w3schools.com/xsl/xsl_functions.asp

Reply

Marsh Posté le 23-07-2004 à 11:14:08    

yes j etais en trainde reflechir la dessus thx :p

Reply

Marsh Posté le 23-07-2004 à 16:43:23    

J'avais écrit un convertisseur CSV --> XML tu peux t'en inspirer, c'est le même principe :
 


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:output method="xml" indent="yes" encoding="ISO-8859-1" />  
 
<xsl:param name="rowSeparator"><xsl:text> </xsl:text></xsl:param>
<xsl:param name="colSeparator"><xsl:text>;</xsl:text></xsl:param>
<xsl:param name="empty"><xsl:text>.</xsl:text></xsl:param>    
<xsl:param name="title" />
 
<xsl:template match="/">  
  <root>
  <table>
      <xsl:call-template name="stripRows">
        <xsl:with-param name="text" select="." />
      </xsl:call-template>
  </table>
  </root>
</xsl:template>
 
<xsl:template name="stripRows">
 <xsl:param name="text" />
 <xsl:param name="textBefore" select="substring-before($text, $rowSeparator)" />
 <xsl:param name="textAfter" select="substring-after($text, $rowSeparator)" />
 <xsl:param name="count" select="1" />
  <xsl:if test="$textBefore!=''">
   <row>
   <xsl:call-template name="stripCols">
        <xsl:with-param name="text" select="concat($textBefore, $rowSeparator)" />
    <xsl:with-param name="count" select="$count" />
      </xsl:call-template>
   </row>
 </xsl:if>
 <xsl:if test="$textAfter!=''">
   <xsl:call-template name="stripRows">
     <xsl:with-param name="text" select="$textAfter"/>
    </xsl:call-template>
 </xsl:if>
</xsl:template>
 
<xsl:template name="stripCols">
 <xsl:param name="text" />
 <xsl:param name="textBefore" select="substring-before($text, $colSeparator)" />
 <xsl:param name="textAfter" select="substring-after($text, $colSeparator)" />
 <xsl:param name="count" />
  <xsl:element name="{concat('col', $count)}">
  <xsl:choose>
   <xsl:when test="not(contains($text, $colSeparator))">
     <xsl:value-of select="normalize-space($text)" />
   </xsl:when>
   <xsl:otherwise>
    <xsl:choose>
     <xsl:when test="$textBefore=''">
      <xsl:value-of select="$empty" />
     </xsl:when>
     <xsl:otherwise>
      <xsl:value-of select="normalize-space($textBefore)" />
     </xsl:otherwise>
    </xsl:choose>
   </xsl:otherwise>
  </xsl:choose>
  </xsl:element>
 <xsl:if test="$textAfter!=''">
   <xsl:call-template name="stripCols">
      <xsl:with-param name="text" select="$textAfter"/>
   <xsl:with-param name="count" select="$count+1" />
    </xsl:call-template>
 </xsl:if>
</xsl:template>
 
</xsl:stylesheet>

Reply

Sujets relatifs:

Leave a Replay

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