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

XML/XSL et SOAP Discussion :

Aide XSLT Concaténer des données


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Aide XSLT Concaténer des données
    Bonjour à tous,

    Je débute avec le langage XSLT, et je m'arrache les cheveux depuis une semaine pour résoudre un problème.
    Je cherche à créer une nouvelle balise de forme <unitid type=cote>Ms. 1611 (1476)</unitid>, à partir de deux balises de forme <unitid type="numéro_de_notice">1611</unitid><unitid type="cote_indéterminée_a">1476</unitid>.
    Ces balises sont contenues dans une balise <did> qui contient d'autres balises qui ne doivent pas faire l'objet de la modification.
    Les autres balises <unitid type="division"> ne doivent pas êtres modifiées non plus.

    Ci-joint, un fragment de mon fichier XML:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <c id="D45051771" level="otherlevel" otherlevel="notice">
    				<did>
    					<unitid type="numéro_de_notice">1611</unitid>
    					<unitid type="cote_indéterminée_a">1476</unitid>
    					<unittitle>G. Vassel, Poésies provençales</unittitle>
    					<unitdate calendar="gregorian" era="ce" normal="1901/2000">XX<emph render="super">e</emph> siècle</unitdate>
    					<langmaterial>
    						<language langcode="oci">provençal</language>
    					</langmaterial>
    					<physdesc>
    						<physfacet type="support">Papier</physfacet>
    						<extent>87 feuillets</extent>
    						<dimensions unit="mm">240 × 185 mm</dimensions>
    						<physfacet type="reliure">Reliure maroquin, aux armes de la ville d'Aix</physfacet>
    					</physdesc>
    				</did>
    				<note type="provenance">
    					<p>Don de l'auteur, 1911.</p>
    				</note>
    				<controlaccess>
    					<persname>Vassel (G.)</persname>
    					<name>Poésies provençales</name>
    				</controlaccess>
    				<controlaccess>
    					<geogname>Aix-en-Provence</geogname>
    					<name>Reliure aux armes de la ville</name>
    				</controlaccess><c id="D45051772" level="otherlevel" otherlevel="sous-notice">
    					<did>
    						<unitid type="division">Fol. 2</unitid>
    						<unittitle>« Obro dóu jouglar Gustàvi Vassèu ; » avec photographies, dessins et autographes</unittitle>
    					</did>
    				</c>
    			</c><c id="D45051773" level="otherlevel" otherlevel="notice">
    				<did>
    					<unitid type="numéro_de_notice">1612</unitid>
    					<unitid type="cote_indéterminée_a">1477</unitid>
    					<unittitle>Statuts de l'Ordre du Croissant, placé sous le patronage de saint Maurice et créé par le roi René</unittitle>
    					<unitdate calendar="gregorian" era="ce" normal="1401/1500">XV<emph render="super">e</emph> siècle</unitdate>
    					<langmaterial>
    						<language langcode="fre">français</language>
    					</langmaterial>
    					<physdesc>
    						<physfacet type="support">Parchemin</physfacet>
    						<extent>19 feuillets</extent>
    						<dimensions unit="mm">240 × 170 mm</dimensions>
    						<physfacet type="reliure">Reliure moderne parchemin, avec armes sur les plats : <emph render="italic">d'or, à la croix bourdonnée de gueules, au chef d'azur, chargé d'une étoile du champ.</emph>
    						</physfacet>
    					</physdesc>
    				</did>
    				<scopecontent>
    					<p>Incomplet du premier feuillet : « ... ne au soupper... » — Fin (fol. 19 v<emph render="super">o</emph>) : « ... Donné ou conseil de l'Ordre, tenu à Angiers, le V<emph render="super">e</emph> jour d'aoust. » — Cf. Lecoy de la Marche, <emph render="italic">Le roi René</emph> (Paris, Didot, 1875, in-8<emph render="super">o</emph>), t. I, page 531, note 1.</p>
    				</scopecontent>
    				<note type="provenance">
    					<p>Achat, 1907.</p>
    				</note>
    				<controlaccess>
    					<corpname>Croissant (Ordre du)</corpname>
    					<name>Statuts</name>
    				</controlaccess>
    			</c>
    J'aimerai donc obtenir quelque chose 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <c id="D45051771" level="otherlevel" otherlevel="notice">
    				<did>
    					<unitid type="cote">Ms. 1611 (1476)</unitid>
    					<unittitle>G. Vassel, Poésies provençales</unittitle>
    					<unitdate calendar="gregorian" era="ce" normal="1901/2000">XX<emph render="super">e</emph> siècle</unitdate>
    					<langmaterial>
    						<language langcode="oci">provençal</language>
    					</langmaterial>
    					<physdesc>
    						<physfacet type="support">Papier</physfacet>
    						<extent>87 feuillets</extent>
    						<dimensions unit="mm">240 × 185 mm</dimensions>
    						<physfacet type="reliure">Reliure maroquin, aux armes de la ville d'Aix</physfacet>
    					</physdesc>
    				</did>
    				<note type="provenance">
    					<p>Don de l'auteur, 1911.</p>
    				</note>
    				<controlaccess>
    					<persname>Vassel (G.)</persname>
    					<name>Poésies provençales</name>
    				</controlaccess>
    				<controlaccess>
    					<geogname>Aix-en-Provence</geogname>
    					<name>Reliure aux armes de la ville</name>
    				</controlaccess><c id="D45051772" level="otherlevel" otherlevel="sous-notice">
    					<did>
    						<unitid type="division">Fol. 2</unitid>
    						<unittitle>« Obro dóu jouglar Gustàvi Vassèu ; » avec photographies, dessins et autographes</unittitle>
    					</did>
    				</c>
    			</c><c id="D45051773" level="otherlevel" otherlevel="notice">
    				<did>
    					<unitid type="cote">Ms. 1612 (1477)</unitid>
    					<unittitle>Statuts de l'Ordre du Croissant, placé sous le patronage de saint Maurice et créé par le roi René</unittitle>
    					<unitdate calendar="gregorian" era="ce" normal="1401/1500">XV<emph render="super">e</emph> siècle</unitdate>
    					<langmaterial>
    						<language langcode="fre">français</language>
    					</langmaterial>
    					<physdesc>
    						<physfacet type="support">Parchemin</physfacet>
    						<extent>19 feuillets</extent>
    						<dimensions unit="mm">240 × 170 mm</dimensions>
    						<physfacet type="reliure">Reliure moderne parchemin, avec armes sur les plats : <emph render="italic">d'or, à la croix bourdonnée de gueules, au chef d'azur, chargé d'une étoile du champ.</emph>
    						</physfacet>
    					</physdesc>
    				</did>
    				<scopecontent>
    					<p>Incomplet du premier feuillet : « ... ne au soupper... » — Fin (fol. 19 v<emph render="super">o</emph>) : « ... Donné ou conseil de l'Ordre, tenu à Angiers, le V<emph render="super">e</emph> jour d'aoust. » — Cf. Lecoy de la Marche, <emph render="italic">Le roi René</emph> (Paris, Didot, 1875, in-8<emph render="super">o</emph>), t. I, page 531, note 1.</p>
    				</scopecontent>
    				<note type="provenance">
    					<p>Achat, 1907.</p>
    				</note>
    				<controlaccess>
    					<corpname>Croissant (Ordre du)</corpname>
    					<name>Statuts</name>
    				</controlaccess>
    			</c>
    Je pense être sur une première piste grâce à la feuille de style suivante, mais qui me supprime toutes les balises contenues dans <did>, et modifie aussi les <unitid type="division">

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
        <xsl:template match="//did">
            <unitid type="cote">
                <xsl:value-of select="concat('Ms. ',unitid[@type='numéro_de_notice'],' (',unitid[@type='cote_indéterminée_a'],')')"/>
            </unitid>
        </xsl:template>
    </xsl:stylesheet>
    Est-ce qu'il existe un autre moyen que de récupérer toutes les balises de <did> perdues en faisant des <xsl:value-of select=""> dans le <xsl:template>?
    Quelle expression XPATH utiliser dans le <xsl:template match=""> pour que seules les balises <unitid> soient remplacées?
    Je pensais que le <xsl:variable> allait m'aider mais je n'ai pas su l'utiliser comme il faut...

    Un grand merci pour votre aide et vos réponses!

    Bon week-end

  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
    On peut concevoir deux templates spécifiques pour ces deux éléments unitid et puis le reste on laisse la transformation identique ou ce que on a déjà à s'en occuper.
    Code xslt2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="unitid[parent::*/name()='did' and @type='numéro_de_notice']">
        <xsl:element name="unitid">
            <xsl:attribute name="type">
                <xsl:value-of select="'cote'" />
            </xsl:attribute>
            <xsl:value-of select="concat('Ms. ',./text(),' (',../unitid[@type='cote_indéterminée_a']/text(),')')" />
        </xsl:element>
    </xsl:template>
    <xsl:template match="unitid[parent::*/name()='did' and @type='cote_indéterminée_a']" />

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Un grand merci pour ce script!

    Il faut encore que je regarde du coté des fonctions "text()" et "name()" etc. que je ne sais pas encore utiliser correctement visiblement

    Encore merci,

    Bonne journée

Discussions similaires

  1. [XSLT] Rassembler des données en colonnes suivant un identifiant
    Par Devilpika dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 07/12/2006, 13h04
  2. Réponses: 6
    Dernier message: 09/11/2006, 16h34
  3. Réponses: 3
    Dernier message: 05/12/2005, 02h30
  4. [XSLT] Réorganisation des données
    Par castaka dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2005, 18h24
  5. [Persistance]Aide pour sauver des données en XML
    Par le Daoud dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/06/2005, 13h39

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