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 récursive


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut [XSLT] transformation récursive
    Bonjour tout le monde,

    j'explique le contexte :
    je développe actuellement une classe PHP de linéarisation d'un objet vers du xml (et inversement : délinéarisation de l'objet).

    J'ai implémenté dans cette classe une méthode permettant d'afficher le xml généré. Pour cela, je passe par XSLT.

    Mon problème ne se situe pas au niveau de l'implémentation PHP, mais bien du code XSL.
    Dans le flux XML que je génère, je ne connais jamais : ni sa taille, ni le nombre d'éléments, ni les imbrications, ni le nom de éléments d'ailleurs (je reprends le nom des propriétés de l'objet).

    Du coup, j'ai besoin d' un XSL parfaitement générique, capable d'afficher le nom des éléments, et d'aller aussi profondément que nécessaire dans les imbrications.
    Ma transformation se fait vers du HTML, et plus exactement, une liste : l'élément le plus haut de cette liste étant le nom de l'objet, puis on trouve ses propriétés, et évidemment, si ces propriétés sont des tableaux, on trouve les clefs de ce tableau (qui peut-être multidimensionnel), ses valeurs...une propriété peut-même être un autre objet.
    Bref, c'est une arborescence classique.

    Voici un exemple de 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
    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
    90
    91
    92
    93
    94
    95
    96
     
    <?xml version="1.0" encoding="utf-8"?>
    <object_ocharacters>
    	<aTestMulti>
    		<bla>
    			<_0>1</_0>
    			<_1>2</_1>
    			<_2>3</_2>
    		</bla>
    	</aTestMulti>
    	<aChars>
    		<strength>23</strength>
    		<dexterity>6</dexterity>
    		<intelligence>3</intelligence>
    		<endurance>8</endurance>
    		<swiftness>7</swiftness>
    	</aChars>
    	<aAttacks>
    		<sword>5</sword>
    		<axe>0</axe>
    		<lance>0</lance>
    		<club>0</club>
    		<hand>0</hand>
    	</aAttacks>
    	<aDefenseWith>
    		<sword>1</sword>
    		<axe>0</axe>
    		<lance>0</lance>
    		<club>0</club>
    		<hand>0</hand>
    		<shield>0</shield>
    	</aDefenseWith>
    	<aDefenseAgainst>
    		<sword>2</sword>
    		<axe>1</axe>
    		<lance>0</lance>
    		<club>5</club>
    		<hand>10</hand>
    	</aDefenseAgainst>
    	<aSpecialAtt>
    		<poison>0</poison>
    		<fire>0</fire>
    		<ice>0</ice>
    		<earth>0</earth>
    		<water>0</water>
    	</aSpecialAtt>
    	<aSpecialDef>
    		<poison>0</poison>
    		<fire>0</fire>
    		<ice>0</ice>
    		<earth>0</earth>
    		<water>0</water>
    	</aSpecialDef>
    	<aSpecialMisc>
    		<autoHeal>0</autoHeal>
    	</aSpecialMisc>
    	<oArmour/>
    	<oWeapon>
    		<object_oweapons>
    			<sImg>img/weapons/default.png</sImg>
    			<sIsA/>
    			<aSpecialAtt>
    				<poison>0</poison>
    				<fire>0</fire>
    				<ice>0</ice>
    				<earth>0</earth>
    				<water>0</water>
    			</aSpecialAtt>
    			<aSpecialDef>
    				<poison>0</poison>
    				<fire>0</fire>
    				<ice>0</ice>
    				<earth>0</earth>
    				<water>0</water>
    			</aSpecialDef>
    			<aDefense>
    				<sword>0</sword>
    				<axe>0</axe>
    				<lance>0</lance>
    				<club>0</club>
    				<hand>0</hand>
    			</aDefense>
    			<sName>Basic Sword</sName>
    			<sType>sword</sType>
    		</object_oweapons>
    	</oWeapon>
    	<oEquipment/>
    	<aWeapons>
    		<_0>Basic Sword</_0>
    	</aWeapons>
    	<aArmours/>
    	<aEquipments/>
    	<PV>0</PV>
    	<XP>0</XP>
    	<sImg>img/avatars/default.png</sImg>
    </object_ocharacters>
    Voici le XSL associé :
    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
     
    <?xml version ="1.0" encoding ="utf-8" ?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:php="http://php.net/xsl"
    	extension-element-prefixes="php">
    	<xsl:output method="xml" indent="yes" encoding="utf-8" />
    	<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl" />
    	<xsl:template match="/">
    		<xsl:call-template name="recursive"/>
    	</xsl:template>
    	<xsl:template name="recursive">
    		<xsl:for-each select="*">
    			<ul>
    				<xsl:if test="count(.) != 0">
    					<li>
    					<xsl:value-of select="local-name (.)"/>
    						<xsl:if test="local-name(*)">
    							<li>
    								<xsl:value-of select="local-name(*)"/>
    							</li>
    						</xsl:if>
    						<xsl:if test="text()">
    							=>
    								<xsl:value-of select="text()"/>
     
    						</xsl:if>
    					</li>
    				</xsl:if>
    				<xsl:call-template name="recursive"/>
    			</ul>
    		</xsl:for-each>
    	</xsl:template>
    </xsl:stylesheet>
    Il y a deux problèmes identifiés :
    - la récursivité est mauvaise, visiblement, puisque la liste générée l'est ausi :-) (cela se voit immédiatement à l'indentation : il y a sans doute des tags non fermés)
    - j'affiche 2 fois le 1er élément de chaque imbrication.

    J'ai bien identifié les deux problèmes,et le pourquoi de ces problèmes, mais j'ai quelques soucis pour les résoudre, ma logique XSL n'étant pas parfaite.

    Merci par avance :-)

  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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Il n'y a pas que la récursivité (pourquoi un call-template )
    A vu de nez il y a une methode assez simple pour y parvenir mais voir ce que tu veux faire n'est pas simple à comprendre trop de code faux
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="count(.) != 0">
    même avec bcp d'imagination j'ai du mal a voir ce que tu voulais faire

    Donne un exemple de xml de depart(pas trop long mais suffisamment complexe)
    et de ce que tu voudrais au resultat

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    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
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" extension-element-prefixes="php">
    	<xsl:output method="xml" indent="yes" encoding="utf-8"/>
    	<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl"/>
    	<xsl:template match="/">
    		<xsl:apply-templates/>
    	</xsl:template>
    	<xsl:template match="*">
    			<ul>
    				<xsl:if test="count(.) != 0">
    					<li>
    						<xsl:value-of select="local-name ()"/>
    						<xsl:apply-templates select="local-name() | text()" mode="liste"/>
    						</xsl:if>
    					</li>
    				</xsl:if>
    			<xsl:apply-templates/>
    		</ul>
    	</xsl:template>
    	<xsl:template match="text()" mode="liste">
    		<li>
    			<xsl:value-of select="."/>
    		</li>
    	</xsl:template>	
    </xsl:stylesheet>
    je suis pas sur donc a tester (surtout pour le local-name()...)

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Ok, lol, je reprends. Mettons que j'ai ce 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
     
    <?xml version="1.0"?>
    <root>
    	<array1>
    		<clef1>
    			valeur1
    		</clef1>
    		<clef2>
    			valeur2
    		</clef2>
    	</array1>
    	<array2>
    		<array2_2>
    			<clef1_2_2>
    				valeur1_2_2
    			</clef1_2_2>
    		</array2_2>
    	</array2>
    </root>
    je voudrais obtenir 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <ul>
    	<li>
    		root
    		<ul>
    			<li>
    				array1
    				<ul>
    					<li>clef1 => valeur1</li>
    					<li>clef2 => valeur2</li>
    				</ul>
    			</li>
    			<li>
    				array2
    				<ul>
    					<li>array2_2
    						<ul>
    							<li>
    								clef1_2_2 => valeur1_2_2
    							</li>
    						</ul>
    					</li>
    				</ul>
    			</li>
    		</ul>
    	</li>
    </ul>

    Quant à ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:if test="count(.) != 0">
    j'espèrais parvenir à compter si il y a des noeuds fils pour le noeud courant...

    De même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:if test="local-name(*)"> 
    <xsl:if test="text()">
    j'espèrais parvenir à déduire s'il y a bien un élément fils, pour en afficher le nom, ou un texte, pour l'afficher en face de l'élément.

    J'espère avoir été plus clair.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Avec ta version, tiscars, j'ai des erreurs de balises <li> non fermées. Je n'ai pas encore regardé en détail, j'ai juste remplacé dans mon code, et lancé le code. La validation XML de l'objet DOM de php me balance quelques erreurs concernants ces tags non fermés. Je regarde quand même voir si je peux arranger ça :-)
    Merci déjà d'essayer :-)

  6. #6
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    ok, et ç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
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" extension-element-prefixes="php">
       <xsl:output method="xml" indent="yes" encoding="utf-8"/>
       <xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl"/>
       <xsl:template match="/">
          <xsl:apply-templates/>
       </xsl:template>
       <xsl:template match="*[*]">
             <ul><xsl:value-of select="local-name()"/><xsl:apply-templates/></ul>
       </xsl:template>
       <xsl:template match="*[.!='']">
    	   <li><xsl:value-of select="local-name()"/><xsl:apply-templates select="text()"/></li>
    	   <xsl:apply-templates/>
       </xsl:template>
       <xsl:template match="text()">
    	   <xsl:text disable-output-escaping="yes">=></xsl:text><xsl:value-of select="."/>
       </xsl:template>
    </xsl:stylesheet>
    post edité... donc a retest

  7. #7
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    bon count(.) est toujours = 1 (tu comptes le nombre de noeud courant pour resumer)
    plutot ce style la
    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
    <?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" indent="yes" encoding="utf-8"/>
    	<xsl:template match="/">
    	<ul>
    		<xsl:apply-templates select="*"/>
    	</ul>
    		</xsl:template>
    	<xsl:template match="*">
    	<li><xsl:value-of select="local-name ()"/><xsl:apply-templates select="text()"/>
    				<ul>
    			<xsl:apply-templates select="*"/>
    				</ul>
    		</li>
    	</xsl:template>
    	<xsl:template match="text()">       
            <xsl:value-of select="concat('=&gt;',.)"/>
    	</xsl:template>
    </xsl:stylesheet>

    edit: c'est quand même bizarre cette fixation sur les call-template ces derniers temps Y a une promo :

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Ok ok merci les gars :-)

    Avant de tester vos nouvelles version, je tiens à préciser qu'en modifiant un peu le XSL de Tiscars, je suis presque parvenu au bon affichage, sauf que la valeur finale (donc text() ) est répété deux fois.

    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
     
    <?xml version ="1.0" encoding ="utf-8" ?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:php="http://php.net/xsl"
    	extension-element-prefixes="php">
    	<xsl:output method="xml" indent="yes" encoding="utf-8" />
    	<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl" />
       <xsl:template match="/">
          <xsl:apply-templates/>
       </xsl:template>
       <xsl:template match="*">
             <ul>
                <xsl:if test="count(.) != 0">
                   <li>
                      <xsl:value-of select="local-name ()"/>
                      <xsl:apply-templates select="text()" mode="liste"/>
                   </li>
                </xsl:if>
             <xsl:apply-templates/>
          </ul>
       </xsl:template>
       <xsl:template match="text()" mode="liste">
          <ul><li>
             <xsl:value-of select="."/>
          </li></ul>
       </xsl:template>   
    </xsl:stylesheet>
    Je teste vos versions maintenant :-)

    J'ajoute un extrait des résultats :

    Dernier code de Erwin :
    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
     
    object_ocharacters
     
        * aTestMulti
              o bla
                    + _0=>1
                          # _1=>2
                                * _2=>3
                          # aChars
                                * strength=>23
                                      o dexterity=>6
                                            + intelligence=>3
                                                  # endurance=>8
                                                        * swiftness=>7
                                                        * aAttacks
                                                              o sword=>5
                                                                    + axe=>0
    Code de Tiscars que j'ai modifié :
    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
    # object_ocharacters
     
        * aTestMulti
              o bla
                    + _0
                          # 1
                      1
                    + _1
                          # 2
                      2
                    + _2
                          # 3
                      3 
     
        * aChars
              o strength
                    + 23
                23
              o dexterity
                    + 6
                6
              o intelligence
                    + 3
                3
              o endurance
                    + 8
                8
              o swiftness
                    + 7
                7 
     
        * aAttacks
              o sword
                    + 5
                5
              o axe
                    + 0
                0
              o lance
                    + 0
                0
              o club
                    + 0
                0
              o hand
                    + 0
                0
    Comme vous le voyez, les dernières valeurs sont répétées, hors <li> on dirait.

    Dernier code de Tiscars :
    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
    # object_ocharacters
    # aTestMulti
    # bla
    # _0=>1
    # =>1_1=>2
    # =>2_2=>3
    # =>3aChars
    # strength=>23
    # =>23dexterity=>6
    # =>6intelligence=>3
    # =>3endurance=>8
    # =>8swiftness=>7
    # =>7aAttacks
    # sword=>5
    =>5
    Un peu le même genre, mais pas d'in dentation, ou peu.

    Mais on est pas loin!

  9. #9
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Enleve-moi ce count(.) que je ne saurais voir et qui ne sert rien (voir plus haut)

  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Ok je vire le count (), qui ne sert effectivement à rien :-)
    Pour l'instant, le code le plus approchant reste donc :
    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
    <?xml version ="1.0" encoding ="utf-8" ?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:php="http://php.net/xsl"
    	extension-element-prefixes="php">
    	<xsl:output method="xml" indent="yes" encoding="utf-8" />
    	<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl" />
       <xsl:template match="/">
          <xsl:apply-templates/>
       </xsl:template>
       <xsl:template match="*">
             <ul>
               <li>
                  <xsl:value-of select="local-name ()"/>
                  <xsl:apply-templates select="text()" mode="liste"/>
               </li>
             <xsl:apply-templates/>
          </ul>
       </xsl:template>
       <xsl:template match="text()" mode="liste">
          <ul><li>
             <xsl:value-of select="."/>
          </li></ul>
       </xsl:template>   
    </xsl:stylesheet>

  11. #11
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    Erwy est jalou car je suis devenu meilleur que lui ... (si seulement c etait vrai...)

  12. #12
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    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
    <?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" indent="yes" encoding="utf-8"/>
    	<xsl:template match="/">
    		<ul>
    			<xsl:apply-templates select="*"/>
    		</ul>
    	</xsl:template>
    	<xsl:template match="*">
    		<li>
    			<xsl:value-of select="local-name ()"/><xsl:apply-templates select="text()"/>			
    		<xsl:if test="*"><ul>
    				<xsl:apply-templates select="*"/>
    			</ul></xsl:if>
    		</li>
    	</xsl:template>
    	<xsl:template match="text()">
    		<xsl:value-of select="concat('=&gt;',.)"/>
    	</xsl:template>
    </xsl:stylesheet>
    resultat de ton exemple precedent
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <ul>
    	<li>root<ul>
    			<li>array1<ul>
    					<li>clef1=&gt; 
             valeur1 
          </li>
    					<li>clef2=&gt; 
             valeur2 
          </li>
    				</ul></li>
    			<li>array2<ul>
    					<li>array2_2<ul>
    							<li>clef1_2_2=&gt; 
                valeur1_2_2 
             </li>
    						</ul></li>
    				</ul></li>
    		</ul></li>
    </ul>

  13. #13
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Lol...ne cries pas victoire trop vite, j'ai un peu modifié son code :

    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
       <xsl:template match="/">
       <ul>
          <xsl:apply-templates select="*"/>
       </ul>
          </xsl:template>
       <xsl:template match="*">
       <li><xsl:value-of select="local-name ()"/><xsl:apply-templates select="text()"/>
                <ul><li>
             <xsl:apply-templates select="*"/>
                </li></ul>
          </li>
       </xsl:template>
       <xsl:template match="text()">       
            <xsl:value-of select="concat('=&gt;',.)"/>
       </xsl:template>
    et j'obtiens ç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
    object_ocharacters
     
        *
        * aTestMulti
              o
              o bla
                    +
                    + _0=>1
                    #
                    + _1=>2
                    #
                    + _2=>3
        #
        * aChars
              o
              o strength=>23
              +
              o dexterity=>6
              +
              o intelligence=>3
              +
              o endurance=>8
              +
              o swiftness=>7
        +
        * aAttacks
              o
              o sword=>5
              +
              o axe=>0
              +
              o lance=>0
              +
              o club=>0
              +
              o hand=>0
    C'est pas mal du tout! Mais cette fois, ce n'est pas le trexte qui est répété, mais une puce, sans rin qui suit. (c'est moi qui ai ajouté un <ul> pour remettre l'indentation correcte, mais bon...ça marche pas parfaitement lol). Il ne manque pas une condition ?

  14. #14
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Yo!!

    Erwy vainqueur !!!

    Merci beaucoup beaucoup!

    Maintenant, il me reste à étudier ça de prêt...pour mieux comprendre.
    Je n'avais pas bossé avec des XSL depuis 6 mois...on perd vite...et je ne faisais rien de très complexe finalement (c'était avec XMLRAD, sur un projet existant, donc beaucoup de templates de page déjà existant, donc juste à modifier un peu...c'est moins facile quand on part de zéro lol).

    Merci à tous les deux, vraiment :-)

    Johan

  15. #15
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par tiscars
    Erwy est jalou car je suis devenu meilleur que lui ... :
    Faut bein vous laissez espérer un peu (quand on vit à ce qu'on est réduit a faire pour y arriver.......)

  16. #16
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    Allez hop, je mets vos deux pseudo dans les "credits" de ma classe, vous allez bientôt être célèbres ! ;-)

  17. #17
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut

  18. #18
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par tiscars
    Allez un jour tu seras grand mon petit (et mûr à point )

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

Discussions similaires

  1. [XSLT]Transformation d'images
    Par boleduch dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/10/2005, 14h03
  2. [XSLT]Transformer une partie d'un document
    Par Floyd dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/10/2005, 14h03
  3. [XML][XSLT] transformer le xml en binaire via une xslt
    Par chama dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/07/2005, 11h42
  4. [XSLT] transformation XHTML->XML
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 23/05/2005, 13h15
  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