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 :

[XSL] Transformation d´un string en plusieurs


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par défaut [XSL] Transformation d´un string en plusieurs
    Salut à tous,

    je suis débutante en xslt.
    J´ai ce fichier XML que j´aimerais transformer en un autre fichier XML:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Root version="2.0.0">
    <Meta name="TopLevelSort" value="1 3 5 6 8 9"/>
    <Meta name="preliminary" value="false"/>
    <Title date="2009-10-26" name="ARD" version="2010"/>
    <ClassKinds>
    <ClassKind name="chapter"/>
    <ClassKind name="block"/>
    <ClassKind name="category"/>
    </ClassKinds>
    </Root>

    J´aimerais avec du XSLT transformer en XML la ligne marquée en rouge (<Meta name="TopLevelSort" value="1 3 5 6 8 9"/>) pour soustraire la valeur de l´attribut "value" de l´élement "Meta" afin d´obtenir:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Root>
    <chapter>1</chapter>
    <chapter>3</chapter>
    <chapter>5</chapter>
    <chapter>6</chapter>
    <chapter>8</chapter>
    <chapter>9</chapter>
    </Root>

    Quelqu´un peut-il m´aider. Comment dois-je écrire mon fichier .xslt pour obtenir le bon résultat? Merci beaucoup.

    Sylvie

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour Sylvie,

    tu peux créer une règle pour sélectionner la chaîne "1 3 5 6 8 9",

    si la chaîne est vide
    alors on retourne le noeud vide
    sinon extraire le premier chiffre de la chaîne et créer l'élément correspondant
    puis traiter le reste de la chaîne

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par défaut
    Salut Polymorphisme,

    merci pour ta réponse. Pourrais-tu s´il te plaît me donner la version codée en xslt de ta solution. Je pourrais ainsi directement l´essayer. Merci.

    J´ai par exemple voulu faire ceci (mais j´ai été coincé en voulant faire pareil pour la prochaine sélection: j´arrive bien à prendre le "1", mais je ne sais pas comment continuer et prendre le "2" et le "3" etc.):

    <xsl:template name="fonction_boucle">
    <xsl:template match="Meta[1]">
    <xsl:param name="motEntier" select="@value" />
    <xsl:param name="string" select="null" />
    <xsl:value-of select="$string" />
    <xsl:if motEntier!=" ">
    <xsl:call-template name="boucle">
    <xsl:with-param name="string" select="$(substring-before($motEntier,' '))" />
    </xsl:call-template>
    </xsl:if>
    </xsl:template>

  4. #4
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour Sylvie,

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
        <xsl:output method="xml" encoding="ISO-8859-1"/>
     
        <xsl:template match="/">
            <xsl:apply-templates/>
        </xsl:template>
     
        <xsl:template match="Root">
            <xsl:copy>       
                <xsl:call-template name="chapters">
                    <xsl:with-param name="string" select="Meta[@name='TopLevelSort']/@value"/>
                </xsl:call-template>
            </xsl:copy>
        </xsl:template>
     
        <xsl:template name="chapters">
            <xsl:param name="string"/>
     
            <xsl:choose>
                <!-- si la chaîne est vide -->
                <xsl:when test="$string=''">
                    <!-- alors on retourne le noeud vide -->
                    <xsl:value-of select="/.."/>
                </xsl:when>
                <!-- si la chaîne n'est pas vide -->
                <xsl:otherwise>
                    <!-- alors on crée un noeud chapter -->
                    <chapter>
                        <xsl:value-of select="substring($string,1,1)"/>
                    </chapter>
                    <!-- puis on traite le reste de la chaîne -->
                    <xsl:call-template name="chapters">
                        <xsl:with-param name="string" select="substring-after($string,' ')"/>
                    </xsl:call-template>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:template>
     
    </xsl:stylesheet>
    Il existe bien entendu d'autres façons de faire.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Par défaut
    Salut Polymorphisme,

    ta solution marche super bien. Merci encore

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

Discussions similaires

  1. transformation xml+xsl dans un string et non un fichier
    Par le_chomeur dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/02/2008, 15h14
  2. [XSL] Transformation de string avec espaces
    Par VolaiL dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 19/05/2006, 15h52
  3. XSL Transformation sour mozilla
    Par bolo dans le forum XSL/XSLT/XPATH
    Réponses: 19
    Dernier message: 08/04/2006, 19h42
  4. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32
  5. [XML/XSL] Transformation Excel
    Par Tyler Durden dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/11/2003, 21h00

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