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 :

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


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    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 : 10
    Points : 9
    Points
    9
    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 émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    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