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] transformation en fonction d'information disponible en tete de fichier xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [XSLT] transformation en fonction d'information disponible en tete de fichier xml
    Bonjour,
    Voici le fichier xml que je dois customiser

    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
    <?xml version="1.0"?>
    <CfgExpression xsi:schemaLocation="urn:com:das:conf CfgDef.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:com:das:conf">
        <Description>
            <Characteristic Description="desc Equipment" Id="1" Name="Equipment">
                <Characteristic Description="desc Middle equipment" Id="2" Name="Middle"/>
                <Characteristic Description="desc Luxe equipment" Id="3" Name="Luxe"/>
                <Characteristic Description="desc Basic equipment" Id="4" Name="Basic"/>
            </Characteristic>
            <Characteristic IsExclusive="true" Description="desc Engine" Id="5" Name="Engine">
                <Characteristic Description="desc V6 engine" Id="6" Name="V6"/>
                <Characteristic Description="desc V12 engine" Id="7" Name="V12"/>
            </Characteristic>
        </Description>
        <Expression>
            <AND>
                <OR>
                    <EffectivityRef Id="2" Name="35827.1"/>
                    <EffectivityRef Id="1" Name="35828.1"/>
                </OR>
                <OR>
                    <AND>
                        <Characteristic Id="5" Name="Engine">
                            <Characteristic Id="6" Name="V6"/>
                        </Characteristic>
                        <Characteristic Id="1" Name="Equipment">
                            <Characteristic Id="4" Name="Basic"/>
                        </Characteristic>
                    </AND>
                    <AND>
                        <Characteristic Id="5" Name="Engine">
                            <Characteristic Id="7" Name="V12"/>
                        </Characteristic>
                        <Characteristic Id="1" Name="Equipment">
                            <Characteristic Id="3" Name="Luxe"/>
                        </Characteristic>
                    </AND>
                </OR>
            </AND>
        </Expression>
    </CfgExpression>

    voici le fichier xsl que j'utilise pour l'instant
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cfg="urn:com:das:conf">
        <xsl:output method="text"/>
     
        <!-- template CfgExpression -->
        <xsl:template match="cfg:CfgExpression">
            <xsl:for-each select="cfg:Expression">
                <xsl:apply-templates/>
            </xsl:for-each>
        </xsl:template>
        <!-- template Expression -->
     
        <!-- template Description -->
        <xsl:template name="Description">
                <xsl:apply-templates/>
        </xsl:template>
     
        <!-- template AND -->
        <xsl:template match="cfg:AND">
            <xsl:for-each select="*">
                <xsl:if test="position() != 1">
                    <xsl:text> ; </xsl:text>
                </xsl:if>
                <xsl:apply-templates select="."/>
            </xsl:for-each>
        </xsl:template>
     
        <!-- template OR -->
        <xsl:template match="cfg:OR">
            <xsl:for-each select="*">
                <xsl:if test="position() != 1">
                    <xsl:text> | </xsl:text>
                </xsl:if>
                <xsl:apply-templates select="."/>
            </xsl:for-each>
        </xsl:template>
     
        <!-- template Caracteristic -->
        <xsl:template match="cfg:Characteristic">
            <xsl:value-of select="@Name"/>
            <xsl:text>,</xsl:text>
            <xsl:value-of select="cfg:Characteristic/@Name"/>
            <xsl:text/>
        </xsl:template>
     
         <!-- template EffectivityRef -->
        <xsl:template match="cfg:EffectivityRef">
            <xsl:text>[</xsl:text>
            <xsl:value-of select="@Name"/>
            <xsl:text>]  </xsl:text>
        </xsl:template>
     
    </xsl:stylesheet>
    Voila le resultat aujourd'hui

    [35827.1] | [35828.1] ; Engine,V6 ; Equipment,Basic | Engine,V12 ; Equipment,Luxe

    voila ce que je voudrais avoir

    [35827.1] | [35828.1] ; Engine,V6 ; Equipment{Basic} | Engine,V12 ; Equipment{Luxe}

    L’affichage “{ }“ or “,” est dependant de la valeur de ”IsExclusive” disponible dans la partie <Description>

    avec un autre fichier xsl :

    Engine,desc V6 Engine; Equipment{desc Basic equipment} | Engine,desc V12 Engine; Equipment{desc Luxe equipment}


    Dans ce cas je voudrais ne pas tenir compte de la balise ”EffectivityRef” et du ”AND” et ”OR” associés juste au-dessus et récupérer la valeur de Description à la place de chaque valeur.

    est ce que quelqu'un a une idée ?
    Ludovic

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    vois avec ces modification
    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
     
    ...
    <xsl:variable name="desc" select="/cfg:CfgExpression/cfg:Description/cfg:Characteristic[@IsExclusive='true']/cfg:Characteristic/@Id"/>
    ....
     
    	<xsl:template match="cfg:Characteristic">
    		<xsl:value-of select="@Name"/>
    			<xsl:choose>
    			<xsl:when test="cfg:Characteristic/@Id=$desc">
    				<xsl:text>,</xsl:text>
    				<xsl:value-of select="cfg:Characteristic/@Name"/>
    			</xsl:when>
    			<xsl:otherwise> {<xsl:value-of select="cfg:Characteristic/@Name"/>}</xsl:otherwise>
    		</xsl:choose>
    		<xsl:text/>
    	</xsl:template>

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup cela fonctionne parfaitement

    une idée sur la deuxieme question :

    avec un autre fichier xsl :

    Engine,desc V6 Engine; Equipment{desc Basic equipment} | Engine,desc V12 Engine; Equipment{desc Luxe equipment}

    Dans ce cas je voudrais ne pas tenir compte de la balise ”EffectivityRef” et du ”AND” et ”OR” associés juste au-dessus et récupérer la valeur de Description à la place de chaque valeur.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/04/2007, 10h01
  2. Réponses: 1
    Dernier message: 22/11/2005, 17h19
  3. [XSLT] transformation XHTML->XML
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 23/05/2005, 13h15
  4. [XSLT] Tri en fonction d'un paramètre
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 21/04/2005, 10h29
  5. [XSLT] transformation XML->XML en php
    Par amellouki dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 03/03/2005, 12h32

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