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 :

Demande simple exemple de XSL [Débutant(e)] [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut Demande simple exemple de XSL
    Bonjour,

    C'est la première fois que j'essaye d'écrire un xsl donc je galère...
    J'aimerai avoir un exemple pour mieux comprendre le xls :
    Voici le genre de transformation que j'aimerai executer : xml --> xml.

    Voici le xml d'origine :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <row id="1">
    	<data id="1">John</data>
    	<data id="2">Freeman</data>
    	<data id="3">France</data>
    	<data id="4">2</data>
    </row>
    <row id="2">
    	<data id="1">Marc</data>
    	<data id="2">Kerry</data>
    	<data id="3">USA</data>
    	<data id="4">0</data>
    </row>
    ...
    Voici comment j'aimerai le formatter le xml après passage du xsl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Personne id = "1">
    	<Nom>John Freeman</Nom>
    	<Pays>France></Pays>
    </Personne>
    <Personne id = "2">
    	<Nom>Marc Kerry</Nom>
    	<Pays>USA></Pays>
    	<enfant>2</enfant>
    </Personne>
    Vous remarquerez que le tag <enfant> n'est rempli que si la valeur <data id="4"> est + grand que 0

    Voici un gabarit de mon xsl mais je n'arrive pas à aller plus loin :

    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
    <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="row">
    	<xsl:apply-templates select="data" />
    </xsl:template>
     
    <xsl:template match="data">
     
    	<xsl:if test="@id = 1">
    	<Nom>
        <xsl:value-of select="." />
    	</Nom>
    	</xsl:if>
     
    </xsl:template>
     
    </xsl:stylesheet>
    Pouvez-vous m'aider ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Dans ton cas, il ne vaut mieux pas faire de template pour data.
    Le plus simple à mon sens est de faire le traitement dans le template de row :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="row">
      <Personne id="{@id}">
        <Nom><xsl:value-of select="data[@id=1]"/> <xsl:value-of select="data[@id=2]"/></Nom>
        <!-- etc. -->
      </Personne>
    </xsl:template>

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Par défaut
    tiens, ça me rassure, j'aurais fait ça également.

    J'ajoute que pour faire un if pour afficher seulement si enfant > 0, tu peux utiliser un xsl:if et la syntaxe est d'utiliser &lt; pour >

    http://www.w3schools.com/xsl/xsl_if.asp

    Bon courage !

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Ah effectivement, c'est + logique et + simple.

    Merci pour ces renseignements

  5. #5
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Re-bonjour,

    Puis-je vous soumettre une autre exemple de formatage xsl où je bloque ?

    Considérons ce fichier xml en entrée :

    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
    <root>
    	<row id="1">
    		<data id="1">A</data>
    		<data id="2">10</data>
    		<data id="3">bloc A</data>
    	</row>
    	<row id="2">
    		<data id="1">B</data>
    		<data id="2">17</data>
    		<data id="3">bloc B</data>
    	</row>
    	<row id="3">
    		<data id="1">C</data>
    		<data id="2">15</data>
    		<data id="3">bloc C</data>
    	</row>
    	<row id="4">
    		<data id="1">B</data>
    		<data id="2">5</data>
    		<data id="3">AUTRE</data>
    	</row>
    </root>
    Je voudrais le formatter comme ceci :

    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
    <Ligne>
    	<Identifiant>A</Identifiant>
    	<montant>10</montant>
    	<description>bloc A</description>
    </Ligne>
    <Ligne>
    	<Identifiant>B</Identifiant>
    	<montant>22</montant>
    	<description>bloc B</description>
    </Ligne>
    <Ligne>
    	<Identifiant>C</Identifiant>
    	<montant>17</montant>
            <montantSupp>5<montantSupp>
    	<description>bloc C</description>
    </Ligne>
    La spécificité est qu'il y a eu un regroupement du bloc <row id="2"> et <row id="4> avec l'ajout de <montantSupp>5<montantSupp> qui correspond au data id=2
    Pourquoi ? car la valeur <data id="1"> est identique dans ces 2 blocs.

    Comment faire cela ? y'a-t-il des fonctions spécifiques ?

    Merci d'avance.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Techniquement il s'agit d'un groupement.
    Il faut regrouper et traiter ensemble les <row> qui ont le même <data id="2">

    En XSLT 2.0 ça se fait très facilement avec xsl:for-each-group

    En XSLT 1.0 c'est la merde. Il faut utiliser une méthode Muench, et c'est des nœuds au cerveau, il faut s'entraîner et comprendre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [CR 10] SQL Expression Field : Demande d'exemple ?
    Par caviar dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 19/06/2010, 14h36
  2. demande d'exemples de parallélisation
    Par fatjoe dans le forum C++
    Réponses: 5
    Dernier message: 02/02/2008, 16h35
  3. Demande simple, requete complexe, 3 lignes :)
    Par project131 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/12/2007, 01h22
  4. [JDOM] simple exemple avec jdom
    Par fatenatwork dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/09/2007, 15h55
  5. demande aide pour XML/XSL
    Par Jarod51 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/01/2006, 19h10

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