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 :

xslt + substring


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    yos
    yos est déconnecté
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 60
    Points
    60
    Par défaut xslt + substring
    Salut tout le monde,
    A partir de cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <table> 
       <tr>       
         <td> 
           blablaMC11blablablablaMC22blablablabla 
         </td> 
         <td> 
           blablablaMC33blabla 
         </td> 
       </tr> 
    </table>
    Le but c'est de récupérer 11 22 33
    Le XSLT suivant ce base sur le mot clé ---> "MC" dans l'exemple puis fait un substring-after avec la longeure voulue pour récupérer les chifres

    Je n'arrive à récupérer que le premier chiffre 11 mais pas les autres
    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
    <xsl:template match="/"> 
           <number> 
             <xsl:choose> 
               <xsl:when test="//text()[contains(., 'MC')]"> 
                   <xsl:variable name="txt1"> 
                       <xsl:copy-of select="//text()[contains(., 'MC')]"/> 
                    </xsl:variable> 
                     <xsl:variable name="txt2"> 
                       <xsl:copy-of select="normalize-space(translate((substring-after($txt1,'MC')), ': .',''))"/> 
                    </xsl:variable> 
     
                    <xsl:variable name="num"> 
                       <xsl:copy-of select="substring($txt2, 1,2)"/> 
                     </xsl:variable>            
                     <!-- un petit test pour être sûr de ne récupérer que des chifres avec une longueure de 2--> 
                     <xsl:choose> 
                     <xsl:when test="number($num) and string-length($num) =2"> 
                          <xsl:value-of select="$num"/> 
                     </xsl:when> 
                 </xsl:choose>          
           </xsl:when> 
        </xsl:choose>  
       </number> 
    </xsl:template>
    comment faire pour récupérer les autres chiffres 22 33 ?
    merci pour votre aide

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 34
    Points : 39
    Points
    39
    Par défaut
    2 questions pour bien comprendre le besoin :

    - sais-tu combien d'occurence de MC tu peux avoir dans un même text ?
    Si oui, il faut que tu fasses un substring-after sur ta chaîne résultat et que tu récupéres ton nombre et ainsi de suite pour chaque occurence de MC.
    C'est une méthode assez bourrin...

    - Ces nombres, tu les stockes pour réutilisation ultérieure ou tu peux les écrire à la volée (c'est-à-dire au fur et à mesure sans stocker leur valeur) ?
    Si tu ne les stockes pas, un template récursif devrait faire l'affaire (tant que le texte contient MC, on continue de découper le morceau de texte restant pour en extraire le nombre après MC. Sinon , on ne fait rien et on sort de la boucle récursive) :


    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    	<xsl:template match="/">
    		<number>
    			<xsl:choose>
    				<xsl:when test="//text()[contains(., 'MC')]">
    					<xsl:variable name="texte" select="."/>
    					<xsl:call-template name="MC_number">
    					<xsl:with-param name="text" select="$texte"/>
    					</xsl:call-template>
    				</xsl:when>
    			</xsl:choose>
    		</number>
    	</xsl:template>
     
    	<xsl:template name="MC_number">
    		<xsl:param name="text"/>
    		<xsl:if test="contains($text, 'MC')">
    			<xsl:variable name="new_text" select="normalize-space(translate((substring-after($text,'MC')), ': .',''))"/>
    			<xsl:variable name="num" select="substring($new_text, 1,2)"/>
    			<xsl:choose>
    				<xsl:when test="number($num) and string-length($num) =2">
    					<xsl:value-of select="$num"/>
    				</xsl:when>
    			</xsl:choose>
    			<xsl:call-template name="MC_number">
    				<xsl:with-param name="text" select="$new_text"/>
    			</xsl:call-template>
    		</xsl:if>
    	</xsl:template>
    </xsl:stylesheet>

  3. #3
    yos
    yos est déconnecté
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta reponse Milouse
    template récursif c'est ce qu'il me falait
    C parfait
    merci encore

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

Discussions similaires

  1. [XSLT] substring et regroupement
    Par nadsky dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/06/2009, 16h31
  2. [XSLT]problème avec substring et when
    Par fabnet dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/10/2007, 07h28
  3. [XSLT] Quand substring-before ne renvoie rien
    Par NicaeaCivitas dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 16/02/2007, 10h14
  4. [XSLT] Faire un substring-after à un emplacement précis
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/12/2005, 11h50
  5. Réponses: 2
    Dernier message: 10/07/2002, 11h51

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