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 :

[XSLT] Réordonner les éléments en sortie


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Chef de projet Technique
    Inscrit en
    Décembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [XSLT] Réordonner les éléments en sortie
    Bonjour tout le monde,

    J'ai un petit soucis de traitement d'un fichier XML avec XSLT.
    Je voudrais obtenir en sortie un fichier HTML (bon, pour ça pas de problème), mais je voudrais que certains éléments qui sont à la fin du fichier XML remontent à une certaine position dans le fichier HTML

    ce sera plus clair avec un exemple :

    voici un exemple du 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
     
    <ARTICLE>
      <INFOS>éléments informatifs</INFOS>
      <TEXTE>
         <TI>Titre</TI>
         <CH>Introduction</CH>
         <TX>texte standard</TX>
         ....(d'autres éléments du texte)...
         <SI>signature</SI>
         <IMAGE>url de l'image 1</IMAGE>
         <LG>legende 1</LG>
         <CR>credit photo 1</CR>
         <IMAGE>url de l'image 2</IMAGE>
         <LG>legende 2</LG>
         <CR>credit photo 2</CR>
         <LG>ceci n'est pas une légende, car non précédé par une photo, mais un encadré</LG>
      </TEXTE> 
    </ARTICLE>
    et je voudrais obtenir un truc du genre (dans le body):

    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
     
    <div class="TI">Titre</div>
    <div class="CH">introduction</div>
     
    <div class="TX">
      <div class="IMAGE">
        <img src="url de l'image 1">
        <div class="LG">legende 1</div>
        <div class="CR">credit 1</div>
      </div>
       texte
    </div>
    ....
    <div class="SI">signature</div>
     
    <div class="IMAGE">
        <img src="url de l'image 2">
        <div class="LG">legende 2</div>
        <div class="CR">credit 2</div>
    </div>
     
    <div class="encadre">
       ceci n'est pas une légende, car non précédé par une photo, mais un encadré
    </div>
    voilà...
    Mon problème est essentiellement de prendre la première image et de la caser dans le texte, tandis que les suivantes doivent être à la fin dans un div spécifique
    Merci par avance pour votre aide

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Chef de projet Technique
    Inscrit en
    Décembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je pense qu'il y a mieux, mais ça a l'air de fonctionner :

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    	<xsl:output method="xml"
                            encoding="ISO-8859-1"
                            indent="yes"/>
     
    	<xsl:template match="*">
    		<xsl:apply-templates />
    	</xsl:template>
     
    	<xsl:template match="TEXTE/TX[1]">
    		<xsl:element name="div">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:apply-templates select="//IMAGE[1]" mode="std" />
    			<xsl:apply-templates />
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="TEXTE/TX[position()!=1]">
    		<xsl:element name="div">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:apply-templates />
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="TEXTE/*[name()!='LG' and name()!='CR' and name()!='TX' and name()!='IMAGE']">
    		<xsl:element name="div">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:apply-templates />
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="TEXTE/*//*">
    		<xsl:element name="span">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:apply-templates />
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="IMAGE[1]" mode="std">
    		<xsl:element name="div">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:element name="img">
    				<xsl:attribute name="src"><xsl:value-of select="text()"/></xsl:attribute>
    			</xsl:element>
    			<xsl:apply-templates select="following-sibling::*[(name()='LG' and position()=1) or (name()='CR' and (position()=1 or position()=2))]" mode="std"/>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="IMAGE[1]"/>
     
    	<xsl:template match="IMAGE[position()!=1]">
    		<xsl:element name="div">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:element name="img">
    				<xsl:attribute name="src"><xsl:value-of select="text()"/></xsl:attribute>
    			</xsl:element>
    			<xsl:apply-templates select="following-sibling::*[(name()='LG' and position()=1) or (name()='CR' and (position()=1 or position()=2))]" mode="std"/>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="LG|CR" mode="std">
    		<xsl:element name="div">
    			<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
    			<xsl:apply-templates />
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="LG[preceding-sibling::*[position()=1 and name()!='IMAGE']]|CR[preceding-sibling::*[(position()=1 and position()=2) and name()!='IMAGE']]">
    		<xsl:element name="div">
    			<xsl:attribute name="class">encadre</xsl:attribute>
    			<xsl:apply-templates />
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="LG|CR"/>
     
    </xsl:stylesheet>
    [/code]

Discussions similaires

  1. [XSLT] Supprimer les tabulations en sortie
    Par jpp38300 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/06/2009, 11h46
  2. Réponses: 2
    Dernier message: 17/03/2009, 15h01
  3. Réponses: 2
    Dernier message: 24/01/2009, 10h21
  4. Réponses: 6
    Dernier message: 06/01/2009, 21h01
  5. [XSLT] somme sur les éléments d'un sous arbre
    Par Raumfahrerralf dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/03/2007, 16h23

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