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

  FORUM HardWare.fr
  Programmation
  XML/XSL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°804076
baygon
Posté le 23-07-2004 à 10:30:26  profilanswer
 

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:

mood
Publicité
Posté le 23-07-2004 à 10:30:26  profilanswer
 

n°804099
mathix
mathix@jabber.org
Posté le 23-07-2004 à 10:45:50  profilanswer
 

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

n°804115
baygon
Posté le 23-07-2004 à 10:58:51  profilanswer
 

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
n°804136
mathix
mathix@jabber.org
Posté le 23-07-2004 à 11:11:42  profilanswer
 

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

n°804139
baygon
Posté le 23-07-2004 à 11:14:08  profilanswer
 

yes j etais en trainde reflechir la dessus thx :p

n°804751
chocoboy
Posté le 23-07-2004 à 16:43:23  profilanswer
 

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>


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

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

 

Sujets relatifs
Débutant en XSLT : <xsl:if>[Resolu] [RegExp] récuperer une chaine encadrée par 2 balises
Surligner une expression recherchée dans une chaine de caractèresAppliquer plusieur fichiers XSL a un document XML
[XSL-WML] Desactiver un lien apres avoir cliqué dessus ?Extraction chaine d'un fichier html
[resolu]replace dans une chainecomparer deux chaines de caractere en java script
Nettoyer une chaine de caractère des articles qu'elle contient 
Plus de sujets relatifs à : [XSL /XSLT]chaine de caractere...decoupage...recupé ration des valeurs


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