1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : août 2017
    Messages : 16
    Points : 11
    Points
    11

    Par défaut Tronquer chaine de caractère via XSL sur plusieurs enregistrements

    Hello tout le monde !

    Alors, j'ai un fichier XML avec plusieurs enregistrements qui ressemble à ça :

    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
     
    <ZBE14_OEMs_ItemUpdate_OUT>
    	<Record>
    		<ItemMaster>
    			<FLAG>ABCDEFGHIJKLMNOPQRST</FLAG>
    			<CONO>700</CONO>
    			<WHLO>20A</WHLO>
    			<STAT>40 / ZS STAT=</STAT>
    			<ITNO>P005603 / ZS ITNO=</ITNO>
    		</ItemMaster>
    	</Record>
    	<Record>
    		<ItemMaster>
    			<FLAG>12345678910111213141516171819</FLAG>
    			<CONO>700</CONO>
    			<WHLO>20A</WHLO>
    			<STAT>20 / ZS STAT=50</STAT>
    			<ITNO>P005937 / ZS ITNO=E25125B30Q16001</ITNO>
    		</ItemMaster>
    	</Record>
    </ZBE14_OEMs_ItemUpdate_OUT>
    Et je souhaiterais, via XSL, formater ce XML pour ne garder que les 10 premiers caractères dans le champs "FLAG".
    Mon bout de code suivant fonctionne mais seule la première occurrence de FLAG ("ABCDEFGHIJ") est tronquée, et elle se trouve reportée sur les autres enregistrements.

    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
    <xsl:stylesheet version="1.0"
    	 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	 <xsl:output omit-xml-declaration="yes" indent="yes"/>
    	 <xsl:strip-space elements="*"/>
     
    	 <xsl:param name="pReplacement" select="substring(ZBE14_OEMs_ItemUpdate_OUT/Record/ItemMaster/FLAG, 1, 10)"/>
     
    	 <xsl:template match="node()|@*">
    		<xsl:copy>
    		<xsl:apply-templates select="node()|@*"/>
    		</xsl:copy>
    	 </xsl:template>
     
    	 <xsl:template match="ZBE14_OEMs_ItemUpdate_OUT/Record/ItemMaster/FLAG/text()">
    	<xsl:value-of select="$pReplacement"/>
    	 </xsl:template>
    </xsl:stylesheet>

    Merci à vous

  2. #2
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 093
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 093
    Points : 1 894
    Points
    1 894

    Par défaut

    Plutôt comme ça.
    Code xsl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="ZBE14_OEMs_ItemUpdate_OUT/Record/ItemMaster/FLAG">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:value-of select="substring(normalize-space(), 1, 10)"/>
        </xsl:copy>
    </xsl:template>

  3. #3
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : août 2017
    Messages : 16
    Points : 11
    Points
    11

    Par défaut

    Hello tsuji

    Merci pour ta réponse, mais je n'ai pas l'impression que cela fonctionne de mon côté. Aurais-tu une autre idée ?

    Merci !

  4. #4
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 093
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 093
    Points : 1 894
    Points
    1 894

    Par défaut

    Je viens de tester et il devrait marcher... Faisant le test encore et vérifiant tous les typos etc...

  5. #5
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : août 2017
    Messages : 16
    Points : 11
    Points
    11

    Par défaut

    Pourrais-tu m'expliquer le fonctionnement de ton bout de code s'il te plaît ? Je débute dans le xml/xsl et j'ai un peu du mal encore.

    J'ai conservé mes en têtes en fait, je fais bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
     
    <xsl:template match="ZBE14_OEMs_ItemUpdate_OUT/Record/ItemMaster/FLAG">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:value-of select="substring(normalize-space(), 1, 10)"/>
        </xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>

  6. #6
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 093
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 093
    Points : 1 894
    Points
    1 894

    Par défaut

    Préservez le template de transformation d'Identité.
    Code xslt : 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
    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
     
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
     
    <xsl:template match="ZBE14_OEMs_ItemUpdate_OUT/Record/ItemMaster/FLAG">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:value-of select="substring(normalize-space(), 1, 10)"/>
        </xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>

  7. #7
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : août 2017
    Messages : 16
    Points : 11
    Points
    11

    Par défaut

    Je t'aime tsuji, merci

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

Discussions similaires

  1. Remplacer caractère dans chaine de caractères via lexique
    Par nico2rib dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/07/2012, 16h01
  2. Récupérer une chaine de caractère via un argument
    Par joker92 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/01/2011, 04h05
  3. Récupération chaine de caractére (via regex)
    Par Micke7 dans le forum Général Java
    Réponses: 3
    Dernier message: 09/01/2009, 11h10
  4. Réponses: 4
    Dernier message: 20/05/2008, 14h46
  5. Réponses: 3
    Dernier message: 26/05/2006, 20h49

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