Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1496 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Recursivité et XSLT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recursivité et XSLT

n°1873748
kikimooss
Posté le 16-04-2009 à 12:14:27  profilanswer
 

Bonjour, j'ai un petit soucis pour creer une feuille de style à partir d'un fichier xml récursif. Je m'explique, j'ai une arborescence XML qui ressemble à ça :  
 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='AttributesIMF.xslt'?>
<Declarations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="AttributesIMF.xsd">
    <Attributes>
        <Attribute>
            <Name>A</Name>
            <Attribute>
                <Name>B</Name>
                <Attribute>
                    <Name>C</Name>
                </Attribute>
                <Attribute>
                    <Name>D<Name>
                </Attribute>
            </Attribute>
         </Attribute>  
      <Attributes>
 
, c'est à dire qu'un noeud peut avoir un certains nombre de fils de meme type que lui qui peuvent eux-mêmes avoir un certains nombre de fils de meme type que lui etc...(un arbre quoi...)
et j'ai un problème lorsque je veux afficher mon fichier XML, j'ai mon fichier XSLT qui ressemble à ça :  
 
 <xsl:template match="Attributes">
    <html>
      <body>
        <h1>Application-Specific Attributes</h1>
        <xsl:apply-templates select="Attribute[not(@xsi:type)]">
          <xsl:sort select="."/>
        </xsl:apply-templates>
      </body>
    </html>
  </xsl:template>
 
Lorsque que j ouvre mon fichier XML avec un navigateur, seul mon Attribute A est affiché et pas les autres...
J'ai essayé avec la balise <xsl:for-each select> mais dans ce cas la ça ne me prend que les fils direct de A, mais ni A ni les fils des fils de A...
Je sais pas si tout ça est tres clair mais si qq'un à une solution je suis preneur...
Merci
 

mood
Publicité
Posté le 16-04-2009 à 12:14:27  profilanswer
 

n°1873752
masklinn
í dag viðrar vel til loftárása
Posté le 16-04-2009 à 12:17:30  profilanswer
 

Ca me semble normal, là tu sélectionnes juste Attributes/Attribute[not(@xsi:type)]. Si ta xsl:template[match='Attribute'] n'est pas récursive ça risque pas de récurser [:spamafote]

 

Mais comme t'as pas donné le contenu de la dite xsl:template[match='Attribute']...


Message édité par masklinn le 16-04-2009 à 12:19:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1873756
kikimooss
Posté le 16-04-2009 à 12:24:23  profilanswer
 

merci pour la réponse rapide...
Voila le contenu de ce qu'il manque je pense...
 
 <xsl:template match="Attribute">
    <h2>
      <a>
        <xsl:attribute name="name">
          <xsl:value-of select="Name"/>
        </xsl:attribute>
        <xsl:value-of select="Name"/> - (<xsl:value-of select="Type"/> ) </a>
    </h2>
    <p>
      <xsl:value-of select="Description"/>
    </p>
  </xsl:template>

n°1873758
masklinn
í dag viðrar vel til loftárása
Posté le 16-04-2009 à 12:29:33  profilanswer
 

Bon ben voilà, t'as ta réponse, à aucun moment tu ne sélectionnes le reste de tes attributs [:spamafote]

 

Donc il faut soit rendre ta template Attribute récursive:

Code :
  1. <xsl:template match="Attribute">
  2.    <h2>
  3.      <a>
  4.        <xsl:attribute name="name">
  5.          <xsl:value-of select="Name"/>
  6.        </xsl:attribute>
  7.        <xsl:value-of select="Name"/> - (<xsl:value-of select="Type"/> )
  8.      </a>
  9.    </h2>
  10.    <p>
  11.      <xsl:value-of select="Description"/>
  12.    </p>
  13.    <xsl:apply-templates select="Attribute"/>
  14. </xsl:template>


Soit effectuer une sélection initiale sur l'axe descendant et non child


Message édité par masklinn le 16-04-2009 à 12:30:08

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1873761
kikimooss
Posté le 16-04-2009 à 12:38:49  profilanswer
 


Ok, c'est cool ça marche...
merci beaucoup pour ton aide rapide et efficace!!
@++ et encore merci.

n°1878381
gaignola
Posté le 27-04-2009 à 17:11:38  profilanswer
 

Bonjour,
J'ai un peu le même type de pb mais, en plus, je voudrais incrémenter le "h"... Je m'explique :
je souhaite transformer le code xml suivant :
 
<node titre="chapitre 1">
<note>contenu1</note>
<node titre="sous-chapitre 1">
<note>blabla1</note>
</node>
<node titre="sous-chapitre 2">
<node titre="sous-chapitre 2.1">
<note>blabla2</note>
</node>
<node titre="sous-chapitre 2.2">
<note>blabla3</note>
</node>
</node>
</node>
<node titre="chapitre 2">
...
</node>
 
en :
 
<h1>1- Chapitre 1</h1>
<p>Contenu 1</p>
<h2>1.1- sous-chapitre 1</h2>
<p>blabla1</p>
<h2>1.2- sous-chapitre2</h2>
<h3>1.2.1- sous-chapitre 2.1</h3>
<p>blabla2</p>
<h3>1.2.2-sous-chapitre 2.2</h3>
<h1>2-Chapitre2</h1>
 
Mon pb est que les nodes peuvent avoir x niveaux de childs qui s'appellent tous "node" (je ne souhaite pas descendre en dessous de h4 et donc transformer les niveaux >4 en "p"...)
 
Je débute en xsl "sur le tas" et je me perds complètement dans les notions de variables et de params
Merci de votre aide

n°1878382
masklinn
í dag viðrar vel til loftárása
Posté le 27-04-2009 à 17:14:46  profilanswer
 

Et donc?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1878540
gaignola
Posté le 28-04-2009 à 08:40:42  profilanswer
 

Donc, je ne trouve pas comment attribuer une balise <hx> en fonction du niveau du <node> où je me trouve, ni comment calculer le numéro de sous-chapitre...
En fait, je pars d'une carte Freemind qui me sert à rédiger divers documents (compte-rendus, rapports et autres joyeusetés...) et je voudrais transformer ce fichier xml en fichier html (ça freemind le fait très bien mais avec des <li> et donc quel que soit la profondeur) qui contienne ces titres. Par ailleurs, j'ai un javascript qui génère une TOC à partir des balises <hx> du document. Je voudrais intégrer ce script pour les documents générés afin d'en faciliter la navigation.  
Ca paraît simple comme ça, mais quand on découvre XSLT ça l'est un peu moins...

n°1878553
masklinn
í dag viðrar vel til loftárása
Posté le 28-04-2009 à 09:21:02  profilanswer
 

Paramètre pour déterminer la profondeur actuelle ou un comptage des nodes sur l'axe ascendants:: pour savoir à quelle profondeur tu est sans avoir à passer de paramètre.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1878834
gaignola
Posté le 28-04-2009 à 15:26:43  profilanswer
 

:ouch: Wow ! Ca calme ! Je suis un humble débutant... pourrais-tu être plus explicite ? un petit exemple peut-être ? ou un lien vers un tuto qui me permette de comprendre... (je ne veux pas te faire perdre ton temps)

mood
Publicité
Posté le 28-04-2009 à 15:26:43  profilanswer
 

n°1878837
masklinn
í dag viðrar vel til loftárása
Posté le 28-04-2009 à 15:30:21  profilanswer
 

http://www.zvon.org/xxl/XSL-Ref/Tu [...] on/r1.html
http://www.zvon.org/xxl/XSL-Ref/Tu [...] s/ax2.html
 
(btw c'était "ancestor" pas "ascendant" l'axe, désolé pour l'erreur)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1878878
avander
Posté le 28-04-2009 à 16:02:37  profilanswer
 

Je pense qu'il faut aussi regarder du côté de l'element xsl:number, très intéressant pour insérer un numérotage dans le résultat...

n°1878883
gaignola
Posté le 28-04-2009 à 16:04:43  profilanswer
 

Preuve de mon ignorance dans le domaine je ne l'avais pas vue :D  
Merci bcp, je vais voir avec zvon si je m'en sors


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Recursivité et XSLT

 

Sujets relatifs
XSLT templateComment transformer un fichier xml en utilisant un xslt ?
xslt et phpXSLT pour chaque fois ou le champ est different
Problème lecture des noeuds dans xsltJeu "Le compte est bon" avec récursivité
XSLT a partir de javascriptxslt
XHTML (Dublin Core) + XSLT -> RDF[XSLT]Récursivité
Plus de sujets relatifs à : Recursivité et XSLT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR