Créer un lien dans XSL en fonction de données dans XML - XML/XSL - Programmation
Marsh Posté le 01-08-2003 à 11:41:28
peut tu poster un bout de xml stp.
si je comprend bien "fichier" c l'url du fichier a d/l. dans ce cas ca serai plus @fichier
sinon telecharge xmlspy pour ton dev ca va t'aider
Marsh Posté le 01-08-2003 à 11:48:24
En fait, j'ai menu.xml, menu.xsl, fichier1.php, index.php dans un répertoire. Qui va rester ? , non je plaisante. Mon fichier index utilise menu.xml pour la partie apparente tout le temps dans le site (menu).
menu.xml
Code :
|
menu.xsl
Code :
|
Voilà, j'espère que tu as compris ce que je veut faire
PS: merci pour le bon de code
Marsh Posté le 01-08-2003 à 12:03:20
bon alors je comprend pas trop ton code, mais c pas grave, je pense avoir un equivalent:
Code :
|
bon j'espere que ca peut t'aider. en fait mon probleme c ke je connais pas la balise "reference"
bonne chance et dis moi si ca marche
Marsh Posté le 01-08-2003 à 12:05:06
Manu la science a écrit : En fait, j'ai menu.xml, menu.xsl, fichier1.php, index.php dans un ... |
c interdit de mettre la balise xsl:value-of dans une autre balise
je pense que tu dois utiliser attribute si je ne me trompe pas...
PS : au fait g rien compri a ce que tu ve faire
mais il fo juste dégager la balise ...
http://selfhtml.selfhtml.com.fr/xm [...] #attribute
Edit : grillé...
Marsh Posté le 01-08-2003 à 13:07:21
En fait, je vois bien que c'est interdit de mettre xsl:value-of-select dans une autre balise: c'est qu'est le problème.
Pour t'expliquer mieux mon problème, je veux faire mon menu en liens hypertextes et je veux que XSL fasse la transformation du fichier XML (où se trouve toutes les données nécessaires à la construction de la balise html de lien hypertexte).
Prenons un exemple:
nom du lien ("forums" dans la balise <label1> ) et page à afficher ("forums.php" dans la balise <page1> )dans le fichier menu.xml
je veux afficher : forums qui pointe sur le fichier "forums.php".
Voilà, j'espère que c'est plus clair...
Marsh Posté le 01-08-2003 à 13:17:36
je pense kil faut que tu revois ton xml alors:
genre comme ca:
Code :
|
ensuite ton xsl aurais cette tete la:
Code :
|
je pense ke ca ca marche
Marsh Posté le 01-08-2003 à 13:31:01
Merci pour la réponse, j'étais en train de regarder la doc que tu m'a indiquée, elle est vraiment très bien. Je l'avais déjà vue mais il y en a tellement sur le net qu'un pauvre débutant comme moi s'y perd facilement.
Avec un menu comme celui là, est-ce que la construction d'une interface pour changer le fichier menu.xml sera aussi évidente à faire qu'avec ce que j'ai mis dans les messages précédents ?
Le code fait tout à fait ce que je voulais, encore merci... (mais il faut fermer la balise page par "/" avant le ">" )
Marsh Posté le 01-08-2003 à 13:43:10
si je comprend bien tu a un prog (ou autre) qui te creer ton xml comme tu veux. si tu as reussi a le faire avant, ca devrait pas trop de poser de pb.
bonne chance et si t'as un pb hesite pas
Marsh Posté le 01-08-2003 à 13:54:09
Non, je n'ai pas (encore) de prog pour créer du XML, mais j'ai vu quelques trucs sur le Net...
Par contre, avec ce que tu m'as gentillement proposé, je ne peux pas gérer les langues sans répéter le nom du fichier à activer:
Code :
|
Si je veux gérer les langues, il faut que je fasse:
Code :
|
Je pense que tu vois le problème pour saisir les données. Il y a redondance d'infos (page="forum_formateur.php" ) car je pointe sur le même fichier.
Je suis en train de voir si on peut améliorer cela...
Marsh Posté le 01-08-2003 à 14:07:04
tu peux faire ca:
Code :
|
voila essaye de faire le xsl ki correspond, si t'y arrive pas je t'aiderai
bonne chance
edit: arf j'avais pas bien lut ton message... je pense pas ke tu puisse eviter un certaine redondance. apres il faut ke tu t'arrange pour en avoir le moins possible...
Marsh Posté le 01-08-2003 à 14:27:33
Pas tout à fait:
Code :
|
j'espère que tu vois maintenant où je veux en venir...
et je vais essayer de faire afficher mon menu comme cela:
en français:
Forums
Forum Logiciel
Forum Formateur
Logiciel
Présentation
...
...
... (pourquoi pas...)
...
...
en anglais:
Forums
Software's forum
Teacher's forum
Software
Presentation
...
...
... (Why not...)
...
...
je recommence en allemand ou tout le monde à compris...
Marsh Posté le 01-08-2003 à 14:33:04
<Mode Vendredi>
on peut l avoir en allemand?
...
</Mode Vendredi>
Marsh Posté le 01-08-2003 à 14:40:33
Im Deutsch (...en allemand):
Foren
Forum für der Software
Forum für die Ausbilder
Software
Vorstellung
En Japonais maintenant...
Marsh Posté le 01-08-2003 à 14:44:54
effectivement c pas la fete... la je vois pas trop comment simplifier ton truc. prend xml spy, utilise l'interface graphique pour faire ton xml, et vois comment il te l'organise... la comme ca je vois pas trop... mais de toute facon, quoi kil arrive tu aura une redondance a un moment ou un autre..
voila dsl de ne pouvoir t'aider plus
bonne chance qd meme
Marsh Posté le 05-08-2003 à 16:42:17
Salut à tous,
J'espère que vous n'avez pas trop chaud... Pour ma part, j'ai super chaud (à Dijon où il doit faire un bon 38°C et 32°C dans le bureau ).
J'ai également attrapé chaud à griller mes neurones sur mon problème...
Voici où j'en suis:
mon fichier super_menu.xml:
Code :
|
Mon fichier super_menu.xsl:
Code :
|
Et voila ce que me donne les deux fichiers:
Code :
|
Or, mon menu devrait être comme ceci:
Code :
|
Le problème est que je ne sais pas comment faire car on ne peut pas imbriquer des for-each les uns dans les autres... ou je m'y prends mal...
Voilà pour mon premier problème.
Le second (on verra quand on n'y sera) est de pouvoir faire apparaître "Forum du logiciel" et "Forum des formateurs" en cliquant pour la première fois sur "Forumfr". Mais là, j'en demande peut-être un peu trop...
Je suppose qu'il y a du javascript imbriqué dans la feuille xsl...
Merci de votre aide
Marsh Posté le 06-08-2003 à 08:06:54
Hello, ca faisait longtemps!
A paris c la mort... hier le termometre en milieu d'aprem annoncé un 40.6... enfin vive la clim
bon sinon il est possible d'imbriqué des for-each (tu es d'ailleusrs obligé).
pour ta deuxieme question bah oui javascript. mais bon apres, en fonction de la beauté du truc final c plus ou moins dur (tu pourrais par exemple afficher des div caché en clicquant ou se genre de choses rigolotes )
voila si t'as du mal pour les double for-each, je t'aiderais, mais je repete un conseil d'avant: utilise xml-spy ( a moins ke ce soit pour une entreprise ki veut pas payer la liscence) avec c le bonheur pour verifer ta syntaxe en live.
aller bonne chance. moi je vais tenter d'arriver en état au boulot ( JE veux pas aller dans le metro )
Marsh Posté le 06-08-2003 à 11:35:29
Salut à tous, (apparemment, il y a des parisiens qui se connectent tôt sur internet...)
J'ai bien XMLSPY (version perso...) que j'utilise depuis que tu me l'a conseillé.
Je suis arrivé à imbriquer des for-each comme le montre le script:
Code :
|
Mais le <xsl:template match="label"> ne marche plus (je ne sais pas pourquoi...). Il devrait pouvoir marcher, mais je suppose que le problème est dans la déclaration des for-each select="menu/title" puis "menu/title/title2" etc.
et voici ce donne le résultat:
Forumfr (T)
Logiciel (T)
PS: j'ai trouvé une salle enterrée type buncker dans ma boîte qui est climatisée... Que du bonheur
Marsh Posté le 06-08-2003 à 11:47:51
C'est bon, j'ai trouvé... Mon menu s'affiche correctement...
J'ai encore une autre question (on va me dire que je suis ch..nt ):
Je voudrais gérer les langues et pour l'instant je ne le gère qu'avec
Code :
|
je pense qu'il faut que je déclare un paramètre qui prendra la place de 'fr'. Comment pourrais-je récupérer ce paramètre via une page php ? et est-ce la bonne méthode ?
Marsh Posté le 06-08-2003 à 12:08:28
bonne idée le bunker! moi y'a la salle machine (20 degrés rock stable)
bon sinon pour tes langues: tu veux faire koi exactement? recupérer dans ta page si le gars a les settings francais ou anglais, et ensuite dans ton xsl aplliquer les bons textes?
Marsh Posté le 06-08-2003 à 14:09:52
En fait, je vais laisser choisir la langue par l'internaute (avec de petits drapeaux...) et le garder comme variable de session php (je pense que c'est le plus simple...) et je voudrais transmettre cette variable au fichier xsl. Comment faire?
J'ai regardé la doc sur param et with-param à selfhtml.com mais je ne comprends pas trop.
Est-ce un truc du genre:
Code :
|
avec <xsl: param name="lang" /> dans le template <xsl:template match="/"> ?
Marsh Posté le 06-08-2003 à 14:35:53
ca je connais pas trop en fait. je sais qu'en javascript, tu peux selectionner un attribut et changer sa valeur (un collegue a fait ca pour des tri). si je retrouve l'exmple je t'envoies ca. par contre a mon toi ca t'interresse plus de le faire coté serveur, mais g aucune idée en php comment ca se fait. si je trouve je te file tt ca. par contre si tu trouve post le.
Voila sinon t''as réussi a t'en sortir avec la class java ke je t filer sur ton autre post?
Marsh Posté le 06-08-2003 à 14:47:31
Pour la class java, je l'ai mis de côté et je le ferai un peu plus tard (encore merci). Le problème du menu devenait plus urgent...
Mais bon, dès que mon menu est fait et a de "la gueule", je le poste, tout comme le reste (transformation de ton code pour le php).
Le savoir est fait pour être diffusé.
Je vais également chercher pour le passage de paramètre par javascript. Il me semblait pourtant l'avoir vu sur ce site...
Je replonge dans la doc...
Plouff...
Marsh Posté le 06-08-2003 à 16:30:26
J'avance avec beaucoup de mal. J'ai trouvé une fonction lang() pour le xml. J'ai du formater mon xml en rajoutant au début du fichier:
Code :
|
et changer mes "lang" par des "xml:lang" des balises label.
avec ceci, je rajoute à mon fichier xsl à la place du template label le code suivant:
Code :
|
Mais à l'affichage, je vois qu'il me donne mon menu avec les titres dans toutes les langues (du style: Forum du logiciel(T2)Software's forum(T2)).
Je pense que l'erreur vient de otherwise, mais j'ai cherché à mettre autre chose, sans succès.
J'ai les neurones qui frisent et qui commencent à griller...
Marsh Posté le 11-08-2003 à 11:24:39
voici où j'en suis...
mon menu en XML:
Code :
|
avec mon fichier XSL:
Code :
|
ceci me permet d'avoir un menu dans la langue choisie. Mais j'ai essayé de développer une version XSL qui me permettrait d'afficher une langue par défaut (anglais par exemple) quand le titre ne possède pas de traduction pour la langue souhaitée.
Comment faire ?
Merci de votre aide
Marsh Posté le 11-08-2003 à 19:35:12
J'ai pas tout lu, je me suis arrêté au moment du <xsl:value-of> interdit dans une balise.
Soit on crée un attribut avec <xsl:attribut>, soit, plus simple, on utilise au choix :
{tagPath} => Valeur à l'intérieur de la node XML
@attributePath => Valeur de l'attribut
Exemple :
XML :
<article>
<title color="red">toto</title>
</article>
Dans le XSL :
<h1 color="@/article/title/color">...</h1>
Ou :
XML :
<article>
<title>toto
<color>red</color>
</title>
</article>
XSL :
<h1 color="{/article/title/color}">...</h1>
Marsh Posté le 12-08-2003 à 10:16:26
Je ne comprends pas trop ton message MagicBuzz (je suis désolé). Peut-être est-ce un message pour les questions précédentes ?
Mon menu me permet pour l'instant d'afficher l'arborescence du fichier xml, c'est à dire tous les titres(1) dans l'ordre d'apparition du fichier xml, après chaque titre(1), il y a les titres(2) qui composent les titres(1) puis les titres(3). Tous ces titres apparaissent sous la forme d'un texte (label) rattaché au titre en question et d'un lien (page php) également rattachée au titre. Et tout ceci dans une langue choisie par l'internaute.
Mais, mon problème est que si l'internaute choisit l'allemand (par exemple), je peux n'avoir qu'une partie de mon menu traduis en allemand et je voudrais faire apparaître les titres de mon menu en allemand quand il peut, sinon en anglais.
Je voudrais avoir la possibilité de gérer une langue par défaut quand la langue choisie n'est pas disponible.
J'espère avoir été un peu plus clair. merci quand même pour la réponse
Marsh Posté le 12-08-2003 à 10:22:45
En fait, je viens de comprendre ta réponse, j'ai fait autrement:
Code :
|
Je gère ainsi mes liens de titre. Je définis une balise de lien (<a> ) à laquelle je lui donne un attribut href (fichier lien) et je met dans le node le texte à afficher, en l'occurence le label choisi en fonction de la langue (mon nouveau problème...)
Marsh Posté le 12-08-2003 à 10:25:45
Manu la science a écrit : Je ne comprends pas trop ton message MagicBuzz (je suis désolé). Peut-être est-ce un message pour les questions précédentes ? |
Oui, je le suis arrêté au début du message, quand tout se monde s'est mis à te conseiller d'utiliser des attributs, là ou des nodes sont plus claires je trouve. Pour moi, un attribut ça contient des nom, des codes, et des chiffres, pas de texte par exemple.
Donc j'ai posté pour indiquer la syntaxe équivalente au @ mais pour les nodes.
Marsh Posté le 12-08-2003 à 10:56:45
j'ai un autre format de fichier xml où les données sont stockées dans les nodes:
Code :
|
J'ai fait la transformation que tu m'a donné pour utiliser un fichier xml mieux formé.
J'ai donc le fichier xsl:
Code :
|
Mais là, bug, ça ne marche pas... Il ne m'affiche pas les titres. Je pense que j'ai un problème pour gérer les langues (dans le for-each). Comment puis-je faire en gardant faisant une règle d'affichage de la balise label qui sera valable pour tous les titres1, 2 et 3 ?
Marsh Posté le 12-08-2003 à 12:20:46
N'oublie pas que le for-each change le contexte actuel, donc tu est déjà dans l'élément label et le parseur ne trouveras plus de label enfant...
Code :
|
A+
Marsh Posté le 12-08-2003 à 13:56:40
Merci Avander, ça marche.
J'essaie d'instaurer une langue par défaut dans mon menu mais j'ai beaucoup de mal. En fait, je voudrais faire cela à la place du for-each ci dessus:
Choix parmi les différentes balises <label>
Si la langue choisie par l'internaute est présente (parmi tous ces <label lang=""> )
J'affiche la langue choisie
Sinon j'affiche la langue par défaut
Je sais qu'il faut utiliser xsl : choose et xsl : otherwise (pour sinon)
Code :
|
Je ne sais pas comment afficher la langue par défaut (en). Je pense que le xsl:when tout seul ne suffira pas et je présens qu'il faudra un for-each dedans. Je suis si près du but, ce serait dommage de renoncer... Sauriez-vous comment faire?
Marsh Posté le 12-08-2003 à 14:43:25
Ceci pourrait faire l'affaire pour l'instant:
|
A suivre...
Marsh Posté le 12-08-2003 à 15:20:53
MERCI, Merci, merci et encore merci....
Ca marche, c'est que du bonheur...
Marsh Posté le 13-08-2003 à 13:59:24
Salut à tous, je reviens à la charge...
Je suis en train de transformer mon menu pour qu'il soit un peu plus vivant, c'est à dire avec des rollovers (de menu quoi...). en fait, je vais utiliser une feuille de style en .css qui est attachée à ma feuille html. Mais dans mon script xml parsé avec le xsl je dois obtenir une balise <a></a> du genre <a href="je l'ai déjà" class="title"></a> si le texte à afficher correspond au title de mon menu.
Je reprends un bout de mon menu:
<menu>
<title>
<file/>
<label/>
<title2>
<file/>
<label/>
</title2>
</title>
<title>
...
</title>
</menu>
Quand j'affiche la balise <a> correspondant au title avec le texte du premier <label> (en bleu) et l'ancrage au fichier du premier <file> (en bleu) grâce au href="{./file}", je voudrais faire afficher dans la balise <a> comme attribut class le noeud dans lequel on se trouve, c'est à dire "title" en vert. J'aimerai pouvoir faire la même chose que pour file (est-ce que "{.}" suffirait? ).
Merci
Marsh Posté le 13-08-2003 à 14:13:12
Ben non pcq {.} va te renvoyer le contenu de l'élément courant, heureusement il y a une fonction qui sert à retrouver le nom de l'élément courant pour te sauver!
|
A+
Marsh Posté le 19-08-2003 à 12:55:19
Salut à tous,
J'ai encore un problème pour mon menu. Je fais apparaître mes title dans un div, mes title2 dans un div enfant en tenant compte de l'arborescence, du style:
div du titre (I)
div du titre2 (I.1)
div du titre2 (I.2)
div du titre (II)
div du titre2 (II.1)
etc...
La feuille xml est parsée avec la feuille xsl et les titres se retrouvent tous sous la forme de div (apparentes ou cachées).
Je souhaite mettre une fonction javascript dans le xsl pour lorsque l'on clique sur le titre (I), on affiche les titre2 (I.1 etI.2). Il me manque un bout de fonction en javascript qui me donne les enfants (div: I.1 et I.2) de l'élément courant (div: I) de la feuille html formée (car le javascript s'exécute côté client).
Pour être un peu plus clair: je suis dans un div (<div>ici</div> ) et je souhaite connaître les div imbriqués:
<div>
<div/>
<div/>
<div/>
</div>
J'espère avoir bien expliquer ma question...
Marsh Posté le 18-09-2003 à 08:35:32
Salut à tous,
je poste mon menu obtenu et pour lequel j'ai encore un problème.
Voici donc mon menu.xml
Code :
|
On peut imbriquer indéfiniment les titles les uns dans les autres et l'affichage est géré par le menu.xsl:
Code :
|
J'en viens donc à ma question: sous IE5 et +, mon menu apparait non déroulé et sous mozila il est déroulé et sans tabulations permettant de visualiser les niveaux hiérarchiques. Je pense que cela vient du javascript utilisé et pas très bien supporté par mozila.
Quelqu'un voit il où mon code pêche et ce qu'il vaudrait mieux que je fasse.
Merci
Marsh Posté le 01-08-2003 à 11:37:16
Bonjour à tous,
Voici mon problème: j'ai un fichier XML qui me sert de menu où je stocke le nom d'une partie, le lien correspondant à cette partie (c'est à dire le fichier à afficher) et un résumé de ce qu'elle contient.
Je voudrais, à l'aide de la feuille XSL dédiée au menu, pouvoir faire afficher le menu tel que l'on puisse voir le nom de la partie et en cliquant l'on puisse accéder à la page. j'ai regardé dans la doc XML in a nutshell... rien...
<reference xlink:type="simple" xlink:href='<xsl:value-of select="fichier"/>'><xsl:value-of select="nom"/></reference>
Apparemment, il n'accepte pas le fait de mettre <xsl:value-of select="fichier"/> qui est "dynamique" comme référence.
Comment dois-je faire? Je souhaite garder l'architecture de mon menu comme cela:
<menu>
<titre>
<nom>...</nom>
<fichier>...</fichier>
</titre>
<titre>
...
</titre>
...
</menu>
Merci de vos réponses.
---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...