Recursivité et XSLT - XML/XSL - Programmation
Marsh Posté le 16-04-2009 à 12:17:30
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
Mais comme t'as pas donné le contenu de la dite xsl:template[match='Attribute']...
Marsh Posté le 16-04-2009 à 12:24:23
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>
Marsh Posté le 16-04-2009 à 12:29:33
Bon ben voilà, t'as ta réponse, à aucun moment tu ne sélectionnes le reste de tes attributs
Donc il faut soit rendre ta template Attribute récursive:
Code :
|
Soit effectuer une sélection initiale sur l'axe descendant et non child
Marsh Posté le 16-04-2009 à 12:38:49
Ok, c'est cool ça marche...
merci beaucoup pour ton aide rapide et efficace!!
@++ et encore merci.
Marsh Posté le 27-04-2009 à 17:11:38
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
Marsh Posté le 27-04-2009 à 17:14:46
Et donc?
Marsh Posté le 28-04-2009 à 08:40:42
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...
Marsh Posté le 28-04-2009 à 09:21:02
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.
Marsh Posté le 28-04-2009 à 15:26:43
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)
Marsh Posté le 28-04-2009 à 15:30:21
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)
Marsh Posté le 28-04-2009 à 16:02:37
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...
Marsh Posté le 28-04-2009 à 16:04:43
Preuve de mon ignorance dans le domaine je ne l'avais pas vue
Merci bcp, je vais voir avec zvon si je m'en sors
Marsh Posté le 16-04-2009 à 12:14:27
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