1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2016
    Messages : 8
    Points : 7
    Points
    7

    Par défaut Récupérer dans des éléments successifs des contenus textuels entre virgules

    Bonjour à tous,

    Je me permets de vous contacter pour un souci de XSLT qui me turlupine.

    Je dispose d'un XML source structuré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <article>
    <éléments_concaténés>valeur1,valeur2,valeur3,valeur2,valeur6,valeur9...</éléments_concaténés>
    </article>
    Par une transformation XSL, je souhaiterais récupérer chacune des valeurs pour les insérer dans un élément <unité> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <OUTPUT>
    <unité>valeur1</unité>
    <unité>valeur2</unité>
    <unité>valeur3</unité>
    <unité>valeur6</unité>
    <unité>valeur9</unité>
    <unité>...</unité>
    </OUTPUT>
    J'ai déjà la tentative suivante :
    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
    <xsl:param name="virgule"><xsl:text>,</xsl:text></xsl:param>
     
        <xsl:template match="éléments_concaténés">
            <xsl:element name="OUTPUT">
            <xsl:call-template name="traitement_valeurs">
                <xsl:with-param name="fichier_source" select="."/>
            </xsl:call-template>
            </xsl:element>
        </xsl:template>
     
        <xsl:template name="traitement_valeurs">
            <xsl:param name="fichier_source"/>
            <xsl:choose>
                <xsl:when test="contains($fichier_source, $virgule)">
                    <xsl:if test="substring-before($fichier_source, $virgule)">
                        <xsl:call-template name="un_par_un">
                            <xsl:with-param name="valeur_unique" select="substring-before($fichier_source, $virgule)"/>
                        </xsl:call-template>
                    </xsl:if>
                    <xsl:if test="substring-after($fichier_source, $virgule)">
                        <xsl:call-template name="traitement_valeurs">
                            <xsl:with-param name="fichier_source" select="substring-after($fichier_source, $virgule)"/>
                        </xsl:call-template>
                    </xsl:if>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:call-template name="un_par_un">
                        <xsl:with-param name="valeur_unique" select="$fichier_source"/>
                    </xsl:call-template>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:template>
     
        <xsl:template name="un_par_un">
            <xsl:param name="valeur_unique"/> 
            <xsl:element name="unité">
                <xsl:value-of select="$valeur_unique"/> 
            </xsl:element>
        </xsl:template>
    Cependant, j'obtiens un message de mon éditeur XML qui m'alerte que le traitement est trop lourd ; pourtant, le contenu de <éléments_concaténés> ne comporte qu'environ 500 valeurs. J'obtiens bien un XML en output mais il est tronqué avant la fin.
    De plus, je souhaiterais que les unités de l'OUPUT soient triés par ordre alphabétique, et que les doublons soient supprimés... Mais mon XSL ne comporte aucun <xsl:for-each> ni <xsl:apply-templates>, je ne peux donc pas insérer de <xsl:sort> pour le tri.

    Je vous remercie par avance beaucoup pour les indications que vous pourrez m'apporter
    Jonas.

  2. #2
    Membre expérimenté
    Inscrit en
    octobre 2011
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 969
    Points : 1 685
    Points
    1 685

    Par défaut

    Cependant, j'obtiens un message de mon éditeur XML qui m'alerte que le traitement est trop lourd ; pourtant, le contenu de <éléments_concaténés> ne comporte qu'environ 500 valeurs. J'obtiens bien un XML en output mais il est tronqué avant la fin.
    Dans ce cas, il faut sortir de la cadre de cet éditeur XML. La plainte sur 500+ valeurs ne devrait ni autoritaire, ni exemplaire. Si il s'agit un travail administratif, on peut le s'achever de par un simple outil du type cli, msxsl (xslt 1.0), saxon (xslt 1.0 ou 2.0) ou bien d'autres sans trop de problème : il est loin de toucher la limite numérique pour un système d'opération pas trop archaïque.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/07/2016, 15h34
  2. Ordre des boucles et des éléments dans tXMLMAP
    Par tibalt76 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 09/11/2012, 17h06
  3. Recherche valeur dans tableau et somme des éléments
    Par eaglewatch dans le forum LabVIEW
    Réponses: 5
    Dernier message: 16/03/2011, 14h22
  4. Réponses: 2
    Dernier message: 17/03/2009, 15h01
  5. Réponses: 10
    Dernier message: 02/04/2007, 17h22

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