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 - débutant - concat strings [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Points : 69
    Points
    69
    Par défaut xsl - débutant - concat strings
    Bonjour à tous,

    Je suis débutant en informatique et je suis un train de générer un document XHTML depuis un document XML.

    Je désire faire une boucle qui prend le contenu de chaque balise XML <motCle>, qui crée un élément <dd> avec une concaténation. exemple: <dl>mot clé1, motclé2, motclé3</dl>

    Hors, dans mon template description (xsl ligne 16) je n'arrive qu'a générer une unique chaîne de caractère et je ne sais pas comment mettre une virgule entre deux mot clés!

    Si quelqu'un peut me donner un coup de main ce serait génial, étant vraiment débutant, un exemple explicite serait la bienvenue

    D'avance, merci à tous pour votre lecture.

    Très bonne journée et meilleures salutations.

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <galerie>
    	<categorie nom="ensembles">
    		<infos>
    			<legende>ceci est une légende</legende>
    			<datePriseVue>
    				<date>
    					<annee>2010</annee>
    					<mois>04</mois>
    					<jour>01</jour>
    				</date>
    				<temps>
    					<heure>22</heure>
    					<minutes>00</minutes>
    					<secondes>00</secondes>
    				</temps>
    			</datePriseVue>
    			<taille>
    				<largeur>1024</largeur>
    				<hauteur>668</hauteur>
    			</taille>
    			<description>
    				<motCle>fleur</motCle>
    				<motCle>plante</motCle>	
    			</description>
    			<auteur>
    				<nom>dupré</nom>
    				<prenom>john</prenom>
    				<mail>mail@gmail.com</mail>
    			</auteur>
    		</infos>
    	</categorie>
    </galerie>
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0"
                     xmlns:xhtml="http://www.w3.org/1999/xhtml"
                     xmlns="http://www.w3.org/1999/xhtml"
                     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                     xmlns:xs="http://www.w3.org/2001/XMLSchema"
                     exclude-result-prefixes="xhtml xsl xs">
    <xsl:output method="xhtml" encoding="UTF-8"
             media-type="text/html"
             omit-xml-declaration="yes"
             doctype-public= "-//W3C//DTD XHTML 1.0 Strict//EN"
             doctype-system= "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
             indent="yes"/>
     
     
    <xsl:template match="description">
    	<xsl:variable name="motCle"><xsl:value-of select="./motCle"></xsl:value-of></xsl:variable>
    	<xsl:if test="(position() != last())"><dd><xsl:value-of select="concat($motCle,', ')"></xsl:value-of></dd></xsl:if>
    	<dd><xsl:value-of select="$motCle"></xsl:value-of></dd>
    </xsl:template>
     
    <xsl:variable name="lien">images/galerie/</xsl:variable>
    <xsl:variable name="vignettes">images/galerie/</xsl:variable>
     
    <xsl:template match="infos">
    <div class="photo">
    	<a><xsl:attribute name="href"><xsl:value-of select="concat ($lien,../@nom,'/0',position(),'.jpg')"></xsl:value-of></xsl:attribute>
    		<img><xsl:attribute name="src"><xsl:value-of select="concat ($vignettes,../@nom,'/vignettes/0',position(),'.jpg')" /></xsl:attribute></img>
    	</a>
    	<dl>
    			<dt>legende</dt>
    			<dd><xsl:value-of select="legende"></xsl:value-of></dd>
    			<dt>date et heure</dt>
    			<xsl:variable name="annee"><xsl:value-of select="datePriseVue/date/annee"></xsl:value-of></xsl:variable>
    			<xsl:variable name="mois"><xsl:value-of select="datePriseVue/date/mois"></xsl:value-of></xsl:variable>
    			<xsl:variable name="jour"><xsl:value-of select="datePriseVue/date/jour"></xsl:value-of></xsl:variable>
    			<dd><xsl:value-of select="concat ($jour,'.',$mois,'.',$annee)"></xsl:value-of></dd>
    			<dt>taille</dt>
    			<xsl:variable name="largeur"><xsl:value-of select="taille/largeur"></xsl:value-of></xsl:variable>
    			<xsl:variable name="hauteur"><xsl:value-of select="taille/hauteur"></xsl:value-of></xsl:variable>
    			<dd><xsl:value-of select="concat ($largeur,'x',$hauteur,'px')"></xsl:value-of></dd>
    			<dt>mot clés</dt>
    			<xsl:apply-templates select="description"></xsl:apply-templates>
    			<dt>auteur</dt>
    			<dd>
    				<dl>
    					<dt>nom</dt>
    					<dd><xsl:value-of select="auteur/nom"></xsl:value-of></dd>
    					<dt>prénom</dt>
    					<dd><xsl:value-of select="auteur/prenom"></xsl:value-of></dd>
    					<dt>contact</dt>
    					<dd>
    						<a><xsl:attribute name="href"><xsl:value-of select="auteur/mail"></xsl:value-of></xsl:attribute>mail contact</a>
    					</dd>
    				</dl>
    			</dd>
    	</dl>
    </div>
    </xsl:template>	
     
     
    <xsl:template match="categorie">
    <div class="categories">
    	<h2><xsl:attribute name="id"><xsl:value-of select="@nom"></xsl:value-of></xsl:attribute><xsl:value-of select="@nom"></xsl:value-of></h2>
    	<div><xsl:attribute name="id"><xsl:value-of select="@nom"></xsl:value-of></xsl:attribute>
    		<div class="conteneur_photos">
    			<xsl:apply-templates select="infos"></xsl:apply-templates>
    		</div>
    	</div>
    </div>
    </xsl:template>	
     
     
     
    <xsl:template match="/">
    <html>
    		<head>
    			<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    			<title>test</title>
    		</head>
    		<body>
    				<div id="fenetre"> <!-- fenêtre d'affichage des photos-->
    					<xsl:apply-templates select="//categorie"></xsl:apply-templates>
    				</div> <!-- fin de la div fenêtre-->
    </body>
    </html>
    	</xsl:template>
     
    </xsl:stylesheet>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="motCle">
      <xsl:if test="position() != 1">, </xsl:if>
      <xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="description">
      <dd>
        <xsl:apply-templates select="motCle"/>
      </dd>
    </xsl:template>
    C'est ce que tu voulais ?

    Note : la méthode d'ouput xhtml n'existe pas. XHTML c'est du XML, donc la méthode par défaut, XML, est bien. Faux. En XSLT 2.0 cette méthode existe. Je ne saurais dire pourquoi, par contre. Il me semble que mes objections tiennent.

  3. #3
    Membre du Club
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Points : 69
    Points
    69
    Par défaut merci
    Hello,

    Oui parfaitement, je débute en informatique et particulièrement en xsl... Cette logique me paraît parfois bizarre

    Je dois dire que je ne comprend vraiment l'utilité du <xsl:apply-templates/> ligne 3?

    C'est noté pour le output je vais creuser tout ça

    Merci encore, c'est vraiment sympa!
    Très bonne journée et meilleures salutations.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par SuperArbre Voir le message
    Oui parfaitement, je débute en informatique et particulièrement en xsl... Cette logique me paraît parfois bizarre
    En fait, c'est un peu normal. XSLT n'est pas fait pour programmer, XSLT est fait pour styliser. Transformer des balises en d'autres. C'est une sorte de super-CSS, c'est d'ailleurs pour ça que ça s'appelle stylesheet.
    Tout ce qui touche à de la programmation, comme concaténer plusieurs balises avec un séparateur entre chaque, passe en fait assez mal.

    Citation Envoyé par SuperArbre Voir le message
    Je dois dire que je ne comprend vraiment l'utilité du <xsl:apply-templates/> ligne 3?
    Insérer le texte de la balise mot-clé.
    Tu peux remplacer par

    <xsl:value-of select="."/>

    si tu veux, mais ce n'est pas aussi puissant. Supposons qu'un jour il y ait aussi des balises à l'intérieur d'une balise <motCle>, avec apply-templates on pourra choisir de les styliser ou pas. Avec value-of on ne les stylise pas et puis c'est tout.

  5. #5
    Membre du Club
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Points : 69
    Points
    69
    Par défaut merci
    Hello,

    C'est noté. Merci pour ton explication très claire concernant le applytemplate! J'ai cherché sur internet, mais sans trouver d'explication aussi simple!

    Merci encore pour ton aide.

    Bonne journée et bon début de semaine

  6. #6
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    l'output xhtml n'existe pas, dans le sens : pas recommandé par W3C ou autre consortium, ou dans le sens : est impossible ?

    Non parce que Oxygen/ le propose dans sa version 12 (j'ai toujours trouvé ça bizarre d'ailleurs, et je l'ai jamais utilisé, pour moi il reste 3 'method' : text, html et xml).

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Dans le sens, "thelvin ferait bien de vérifier la version de XSLT avant de dire des trucs."

    En XSLT 2.0 la méthode d'output xhtml existe bel et bien, merci pour la correction.
    Maintenant j'essaie de comprendre d'où est venue cette idée bizarre, parce que je dois bien dire que je vois pas franchement l'intérêt.

  8. #8
    Membre du Club
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Points : 69
    Points
    69
    Par défaut recherche
    Hello,

    J'ai fait quelques recherches sur le point que tu as soulevé! (à quoi sert la méthode output)...

    Voici la réponse que j'ai obtenue (de source sûr à mon avis) :
    J'explique avec mes mots donc merci de ne pas être trop tatillon!

    La méthode XHTML sert à générer un XHTML valide, les balises auto fermantes comme metha ou img doivent contenir un espace avant d'être fermées...
    <img src="" alt="" /> se qui n'est pas le cas en XML
    Autre exemple, si l'on ne se sert pas de la méthode XHTML la balise script et transformée automatiquement en balise auto fermante se qui pose également un problème.

    Voilà, j'espère que ça servira à quelqu'un.

    Bonne journée à tous

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par SuperArbre Voir le message
    J'ai fait quelques recherches sur le point que tu as soulevé! (à quoi sert la méthode output)...

    Voici la réponse que j'ai obtenue (de source sûr à mon avis) :
    J'explique avec mes mots donc merci de ne pas être trop tatillon!

    La méthode XHTML sert à générer un XHTML valide, les balises auto fermantes comme metha ou img doivent contenir un espace avant d'être fermées...
    <img src="" alt="" /> se qui n'est pas le cas en XML
    Autre exemple, si l'on ne se sert pas de la méthode XHTML la balise script et transformée automatiquement en balise auto fermante se qui pose également un problème.

    Voilà, j'espère que ça servira à quelqu'un.
    J'ai cherché aussi. En fait c'est expliqué .

    En résumé, le XHTML 1.0 est accompagné d'un certain nombre de règles pour favoriser la rétrocompatibilité avec le HTML 4.01, et qui ne sont généralement pas suivies en XML. Les choses dont tu parles sont certaines de ces règles. method="xhtml" indique qu'on fait du XHTML en appliquant ces fameuses règles de rétrocompatibilité.
    Aussi, l'indentation et d'autres questions cosmétiques sont prédéfinies pour suivre une logique plus proche du HTML que du XML.

    Aujourd'hui ça semble un peu futile, mais à l'époque où ça a été fait, ça devait sûrement répondre à un vrai problème.

  10. #10
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    Merci à tous les deux ! Ce sont de bonnes infos, à stocker quelques part juste au cas où.

    Je ne connaissais pas les règles d'espacement (uniquement pour les balises auto-fermantes).

    On en apprend tous les jours, mais le jour de la pentecôte !

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

Discussions similaires

  1. [XSL] Transformation de string avec espaces
    Par VolaiL dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 19/05/2006, 15h52
  2. [XSL][débutant]trié l'ordre des éléments d'un fichier xml
    Par pistache42 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/04/2006, 10h37
  3. [débutant] std::string en ordre alphabétique
    Par Vips dans le forum SL & STL
    Réponses: 4
    Dernier message: 21/03/2006, 21h44
  4. XSl Débutant
    Par thierry337 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/02/2006, 11h36
  5. [débutant][Tooltip] String - passer à la ligne
    Par pingoui dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 21/01/2005, 12h25

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