Bonsoir,

Mon sujet est lié à ce post :

http://forum.alsacreations.com/topic-5-20339-1-Eviter-mlange-JavascriptHTML.html

car je suis en train de convertir en XML/XSL mon code pour pouvoir lors de la 1ère génération de ma grille la généré via Php puis lors de l'ajax (qui appel en post mon code php) me retourne en xml des "sections" ayant subit des modification qui seront traité par le javascript par xsl.

donc voici le problème qui m'amène à poster ici :

Code XML

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="xslgrille.xsl" type="text/xsl" ?>
<grille>
	<entete id="gheader">
		<col name="Titre1"/>
			<fliste id="f">
				<element param="0" name="Choix1"/>
				<element param="2" name="Choix2"/>
				<element param="4" name="Choix3"/>
			</fliste>
		<col name="Titre2"/>
			<fliste id="g">
				<element param="5" name="Choix1"/>
				<element param="8" name="Choix2"/>
				<element param="20" name="Choix3"/>
			</fliste>
	</entete>
</grille>


Code XSL

<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

<xsl:template match="/">	
		<html><head></head>
			<body>
				<table width="400" border="1">
					<xsl:apply-templates select="grille/entete/col"/>
				</table>
			</body>
		</html>	
</xsl:template>

<xsl:template match="entete">
<thead>
<tr>
<xsl:apply-templates select="col"/>
</tr>
</thead>
</xsl:template>

<xsl:template match="col">
	<th>
		<xsl:value-of select="@name"/>
<div>
<ul>
		<xsl:for-each select="col/fliste/element">
<li>
<xsl:value-of select="@name"/>
</li>
		</xsl:for-each>
</ul>
</div>		
	</th>
</xsl:template>

</xsl:stylesheet>


Mon problème est que je n'arrive pas à "boucler" pour rendre les listes "<ul>", rien n'apparait ?!

Merci de votre aide.
Modérateur
Salut,

Je vais tenter de t'aider mais vu que j'apprends aussi XML, va pas falloir poser trop de questions après... Smiley lol Si d'autres veulent compléter ou me corriger, n'hésitez pas, çà m'intéresse aussi... Smiley ravi

Le premier truc qui me dérange, c'est le code que tu cherches à générer... Tu ne sembles pas prendre en compte les standards et quand on touche à XML, je trouve que c'est un comble quand même... Smiley cligne Je ne vois pas de doctype, pas de type MIME, bref un vieux code html à l'ancienne... Utiliser des technologies de pointe pour sortir ça, hum...

Entre nous, pour un premier essai, tenter l'aventure XML/XSLT/(X)HTML/AJAX/PHP est pour le moins osé, pour ne pas dire présomptueux quand on débute... en particulier lorsqu'on a aucune notion d'accessibilité... Tu vas au devant de pas mal d'erreurs, quelquesoit le langage d'ailleurs... Certes, ça te donne une vue d'ensemble mais lorsqu'il va falloir peaufiner, tu vas vite déchanter, m'est avis... A toi de voir... Smiley smile

Personnellement, je te conseillerais plus de te limiter à un code XHTML/CSS/PHP propre afin de faire une application réellement fonctionnelle, quelquesoit le support. L'Ajax, tu peux l'ajouter après... Si tu veux intégrer XML/XSLT, oui, pourquoi pas mais à ma connaissance, aucun moteur de transformation n'est capable d'obtenir un code adapté (soit parce que les navigateurs ne suivent pas, soit parce que les moteurs de transformation font des erreurs) Ca, je voudrais bien que quelqu'un me dise le contraire, je n'ai malheureusement pas de contre-exemple... Smiley confus

C'est ce qui fait que de mon côté, je génère mon code XHTML en interne sans le faire via le serveur du site ou par le navigateur client... Je ne mets que le résultat XHTML sur mon serveur afin de pouvoir corriger les "erreurs" en amont.

Bref, en repartant de ton code, voici comment obtenir un code xhtml composé de deux titres avec les listes associées...

Pour le code XML, ça donne :
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="xslgrille.xsl" type="text/xml" ?>
<grille>
	<title>Grille</title>
	<entete id="gheader">
		<col name="Titre1">
			<fliste id="f">
				<element param="0" name="Choix1" />
				<element param="2" name="Choix2" />
				<element param="4" name="Choix3" />
			</fliste>
		</col>
		<col name="Titre2">
			<fliste id="g">
				<element param="5" name="Choix1" />
				<element param="8" name="Choix2" />
				<element param="20" name="Choix3" />
			</fliste>
		</col>
	</entete>
</grille>
J'intègre chaque liste dans l'élément col parce que je n'ai pas trouvé comment faire autrement... Je passe en text/xml et non text/xsl, parce que je ne compte pas faire ma transfo via IE, entre autres... Laisser le navigateur faire la transformation n'est pas des meilleures pratiques... Par ailleurs, je rajoute un title pour la page parce que c'est obligatoire en (X)HTML...

Pour le code XSLT, j'ai mis :
<?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"
		version="1.0"
		encoding="utf-8"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
		indent="yes" />
	
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
			<head>
				<title><xsl:value-of select="grille/title" /></title>
				<meta http-equiv="content-type" content="text/html; charset=utf-8" />
			</head>
			<body>
				<xsl:apply-templates select="grille/entete" />
			</body>
		</html>
	</xsl:template>

	<xsl:template match="entete">
		<xsl:for-each select="col">
			<h3><xsl:value-of select="@name" /></h3>
			<ul>
				<xsl:for-each select="fliste/element">
					<li><a href="#"><xsl:value-of select="@name" /></a></li>
				</xsl:for-each>
			</ul>
		</xsl:for-each>
	</xsl:template>

</xsl:stylesheet>


Je fais la transformation via Instant Saxon et j'obtiens :
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
   <head>
      <title>Grille</title>
      <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
   </head>
   <body>
      <h3 xmlns="">Titre1</h3>
      <ul xmlns="">
         <li>
            <a href="#">Choix1</a>
         </li>
         <li>
            <a href="#">Choix2</a>
         </li>
         <li>
            <a href="#">Choix3</a>
         </li>
      </ul>
      <h3 xmlns="">Titre2</h3>
      <ul xmlns="">
         <li>
            <a href="#">Choix1</a>
         </li>
         <li>
            <a href="#">Choix2</a>
         </li>
         <li>
            <a href="#">Choix3</a>
         </li>
      </ul>
   </body>
</html>
que je corrige en supprimant la déclaration XML ainsi que les attributs xmlns...

Ce n'est peut-être pas la meilleure méthode, mais ça marche et au final, c'est propre... Smiley ravi On pourrait bien sûr en faire de même si c'est bien un tableau dont tu as besoin mais c'est juste pour le principe... Smiley cligne
Modifié par koala64 (03 Dec 2006 - 18:30)
Je réponds en partie rapidement car je n'ai lu que le début, je vais lire posément après le repas.

Mais je voulais réagir sur quelques chose sur lequel je suis toujours victime peu importe le forum.
Je ne suis pas débutant exepté pour XML/XSL/Ajax

Dans la vie professionelle je suis développeur ASP.Net (Vb.net + SQL), autrement je fais du Php depuis la version 3 ainsi que mysql à la même époque, plus récemment l'XHTML

Mon code html est, et je le sais "un brouillon"(comme quand on fait un tableau en brouillon sur papier, on ne prend pas de régle) je ne mais donc pas les balise de début, il m'arrive de mettre directement des width dans le html, bref c'est du brut pour avoir un résultat. Comme en entreprise, le "joli" c'est après.

Ne pense pas que je sois en colère, mais c'est qu'à force de me faire "coincer" sur çà ca m'énerve, je sais le temps que tu prends pour m'aider (cf l'heure de tes messages hier soir, enfin ce matin Smiley confused ), je te remercie pour l'attention que tu prête à mon problème, je suis pour l'échange des compétences pour dans le but de s'enrichir intellectuellement. Par exemple si j'arrive à faire ce que je veux avec cette grille je le partagerais sur les forums où j'ai poser mes questions ainsi qu'avec des collégues de travail car je sais que le jour où ils en auront besoin ils auront déjà quelques infos/exemple.

koala64 a écrit :
Salut,

Je vais tenter de t'aider mais vu que j'apprends aussi XML, va pas falloir poser trop de questions après... Smiley lol Si d'autres veulent compléter ou me corriger, n'hésitez pas, çà m'intéresse aussi... Smiley ravi

Le premier truc qui me dérange, c'est le code que tu cherches à générer... Tu ne sembles pas prendre en compte les standards et quand on touche à XML, je trouve que c'est un comble quand même... Smiley cligne Je ne vois pas de doctype, pas de type MIME, bref un vieux code html à l'ancienne... Utiliser des technologies de pointe pour sortir ça, hum...

Entre nous, pour un premier essai, tenter l'aventure XML/XSLT/(X)HTML/AJAX/PHP est pour le moins osé, pour ne pas dire présomptueux quand on débute... en particulier lorsqu'on a aucune notion d'accessibilité... Tu vas au devant de pas mal d'erreurs, quelquesoit le langage d'ailleurs... Certes, ça te donne une vue d'ensemble mais lorsqu'il va falloir peaufiner, tu vas vite déchanter, m'est avis... A toi de voir... Smiley smile

Personnellement, je te conseillerais plus de te limiter à un code XHTML/CSS/PHP propre afin de faire une application réellement fonctionnelle, quelquesoit le support. L'Ajax, tu peux l'ajouter après... Si tu veux intégrer XML/XSLT, oui, pourquoi pas mais à ma connaissance, aucun moteur de transformation n'est capable d'obtenir un code adapté (soit parce que les navigateurs ne suivent pas, soit parce que les moteurs de transformation font des erreurs) Ca, je voudrais bien que quelqu'un me dise le contraire, je n'ai malheureusement pas de contre-exemple... Smiley confus


a écrit :

Si d'autres veulent compléter ou me corriger, n'hésitez pas, çà m'intéresse aussi... ravi


là dessus je suis d'accord, toute aide peux nous être utile !
Modérateur
Autant pour moi, j'y suis peut-être aller un peu fort il est vrai. sorry. Smiley confused Le but était plus d'exposer une démarche qui me semble plus juste plutôt que de te vexer. Smiley cligne J'espère néanmoins que ça va t'aider. Smiley smile
koala64 a écrit :
Autant pour moi, j'y suis peut-être aller un peu fort il est vrai. sorry. Smiley confused Le but était plus d'exposer une démarche qui me semble plus juste plutôt que de te vexer. Smiley cligne J'espère néanmoins que ça va t'aider. Smiley smile


Ce n'est pas après toi que j'en ai, mais simplement qu'à chaque fois que j'ai mis un code "brouillon" je me suis fait incendier, c'est systématique, et qu'à force de ne jamais me rebeller, mais de continuer sur ma lancer, on me laisser tomber.
Bon ceci étant terminé, j'ai testé tes exemples et je suis surpris, car bon il y a peu de différence entre nos code xml/xsl mais le tient marche, sans que je sache le pourquoi sur le mien ??
donc j'ai pu me faire le bilan suivant en testant via un transformateur xmldom : bon seulement sur IE car je n'ai pas cherché l'équivalent de ActiveXObject("Microsoft.XMLDOM") pour firefox.

le résultat est correct visuellement, aucun code visible chez le client ci ce n'est le javascript pour la transformation (temporaire), j'ai pas bien compris ton utilisation de Instant Saxon ? c'est simplement pour que tu présentes le retour dans ce forum ?
ce qui fait aussi que je ne comprends pas ceci :

a écrit :

Je passe en text/xml et non text/xsl, parce que je ne compte pas faire ma transfo via IE, entre autres... Laisser le navigateur faire la transformation n'est pas des meilleures pratiques


comment fais-tu alors ?
via un interpreteur javascript ?

Merci.
Modérateur
non, non Smiley ravi

En fait, si je t'ai filé le lien vers Saxon, c'est parce qu'il te permet de créer réellement le fichier html plutôt que de l'avoir en temporaire.

Perso, je me sers de la version 6.5.5 pour le support de XSLT 1.0 car XSLT 2.0, je n'y touche pas encore... On verra plus tard... Smiley murf

Si tu t'orientes sur cette version et que tu te sers de Windows, tu dois déjà disposer de JRE sur ta machine. Ensuite, il faut dézipper l'archive de saxon, mettre le dossier obtenu à la racine de ton disque (c'est plus pratique), puis ouvrir la console de commande...

Pour t'en servir, tu dois charger le fichier saxon.jar dans ton classpath... ça donne un truc du genre :
c:\>set classpath=c:\saxon6-5-5\saxon.jar

Ensuite, tu vas dans le dossier où se trouve les fichiers à transformer et tu tapes un truc du même style que çà, en adaptant en fonction de tes noms de fichier bien sûr :
d:\mon_dossier>java com.icl.saxon.StyleSheet index.xml index.xsl > index.html
Là, je dis de créer le fichier index.html à partir des fichiers index.xml et index.xsl

Il est nécessaire de taper la première ligne de commande à chaque fois que tu lances la console de commande donc mieux vaut la laisser ouverte... Smiley ravi

Pour le type indiqué dans le fichier xml, je mets text/xml et non text/xsl car ce dernier n'est pas standard et ne sert que pour la transformation puisse se faire via IE. Smiley smile
Bonjour
conan76 a écrit :
Mon problème est que je n'arrive pas à "boucler" pour rendre les listes "<ul>", rien n'apparait ?! ....
j'ai testé tes exemples et je suis surpris, car bon il y a peu de différence entre nos code xml/xsl mais le tient marche, sans que je sache le pourquoi sur le mien ??

Il y a deux erreurs :
- dans le XML, ton élément <col> est vide alors qu'il doit contenir <fliste> (pour que le processeur XSLT puisse "boucler" justement).
- dans le xsl, le xpath de ton élément xsl:for-each ramène un ensemble vide de noeud. le xpath correcte (comme te l'a indiqué koala64) est select="fliste/element"


Par ailleurs je me permets de dire que je n'adhère en rien à l'analyse de koala64 d'une façon générale. Je comprends que débutant sur le sujet tu (koala64) ne puisses en avoir une vision éclairée, mais là franchement tu aiguilles le lecteur sur de vraies mauvaises pistes (je ne m'occupe pas de la polémique "ton code est pourri tu ferais mieux de ...), mais par exemple de ceci :

koala64 a écrit :
Personnellement, je te conseillerais plus de te limiter à un code XHTML/CSS/PHP propre afin de faire une application réellement fonctionnelle, quelquesoit le support
Si cette limitation est fondée sur le fait que XML/XSLT ne rend pas du code propre, alors c'est un très mauvais conseil.
koala64 a écrit :
Si tu veux intégrer XML/XSLT, oui, pourquoi pas mais à ma connaissance, aucun moteur de transformation n'est capable d'obtenir un code adapté (soit parce que les navigateurs ne suivent pas, soit parce que les moteurs de transformation font des erreurs) Ca, je voudrais bien que quelqu'un me dise le contraire, je n'ai malheureusement pas de contre-exemple...
De mon coté j'aimerais bien que tu portes à notre connaissance les "erreurs des moteurs de transformation". Les bugs des moteurs en circulation sont plutôt limités et ne genent que très rarement la quotidien du développeur lambda. Sachant que le résultat produit par le moteur dépends de 2 entrées à la main du développeur (le XML source, et le XSL) il est clair que l'imense majorité des problèmes sont à mettre sous la responsabilité dudit développeur.
koala64 a écrit :
C'est ce qui fait que de mon côté, je génère mon code XHTML en interne sans le faire via le serveur du site ou par le navigateur client... Je ne mets que le résultat XHTML sur mon serveur afin de pouvoir corriger les "erreurs" en amont.
Non c'est sérieux ? Mais tu imagines un process comprenant du XSL en charge d'automatiser la production de milliers de pages web et nécessitant une intervention manuelle ? Pour ton information il existe partout dans les entreprises des projets matures qui utilisent XSL pour produire automatiquement du code web adapté.
koala64 a écrit :
je corrige en supprimant la déclaration XML ainsi que les attributs xmlns...
Par manque de maîtrise de la technologie...
Ces questions ont déjà été traitées sur de forum. Le premier item est relatif à un attribut de l'élément <xsl:output>, l'autre à l'emploi adapté des espaces de noms.
koala64 a écrit :
Pour le type indiqué dans le fichier xml, je mets text/xml et non text/xsl car ce dernier n'est pas standard et ne sert que pour la transformation puisse se faire via IE. smile
Incompréhensible. Je pense qu'il y a une grosse confusion derrière ceci. Smiley cligne
Modérateur
Ah ! Merci pour cette réponse, Xavier et bonjour à toi. Smiley smile


a écrit :
Par ailleurs je me permets de dire que je n'adhère en rien à l'analyse de koala64 d'une façon générale. Je comprends que débutant sur le sujet tu (koala64) ne puisses en avoir une vision éclairée, mais là franchement tu aiguilles le lecteur sur de vraies mauvaises pistes (je ne m'occupe pas de la polémique "ton code est pourri tu ferais mieux de ...)
L'analyse que j'ai donné ne me paraît pas tant erronnée que tu sembles prêt à le penser. Si je l'ai faite, c'est à la suite du code indiqué dans ce fil mais aussi de celui indiqué en tout début (lien indiqué par conan76).


a écrit :
koala64 a écrit :
Personnellement, je te conseillerais plus de te limiter à un code XHTML/CSS/PHP propre afin de faire une application réellement fonctionnelle, quelquesoit le support

Xavier a écrit :
Si cette limitation est fondée sur le fait que XML/XSLT ne rend pas du code propre, alors c'est un très mauvais conseil.
Ce n'était pas fondé là-dessus mais plutôt sur le codage HTML/JS. J'ai vu un code qui n'a rien de sémantique (HTML) et qui met bon nombre d'utilisateurs à la porte (JS/Ajax); pas de prise en compte de la navigation clavier ni du fait que JS puisse être activé ou non. On ne commence pas à pratiquer JS par l'Ajax, c'est une erreur lourde de conséquences. C'est pourquoi je me suis dit que ces technologies n'étaient pas maitrisées et qu'au vu de la quantité de choses qu'il faut connaître, il serait préférable de procéder par étapes. XHTML/CSS/PHP me semblait un bon début (au moment où je croyais que conan76 débutait...). Il est vrai que chacun a sa méthode de travail et que je ne procède pas en faisant un brouillon tel qu'il me l'a présenté. Je nettoie au fur et à mesure afin de ne pas prendre trop de risques. Bref, à chacun sa convenance.
Dans la phrase suivante, je précise bien qu'XML et XSLT peuvent être utiles, malgré que je n'ai pas conseillé la meilleure utilisation qu'on puisse en faire, en effet, et pour cause, je n'ai moi-même pas trouvé comment faire. Je considère que pour faire du XML, des connaissances approfondies en (X)HTML sont d'un très grand secours à tel point que j'ai tendance à penser qu'elles sont indispensables. Ca me semble être un très bon conseil, bien au contraire. Le mécanisme est quand même nettement plus simple à comprendre lorsqu'on a cette pratique à son actif.


a écrit :
De mon coté j'aimerais bien que tu portes à notre connaissance les "erreurs des moteurs de transformation". Les bugs des moteurs en circulation sont plutôt limités et ne genent que très rarement la quotidien du développeur lambda. Sachant que le résultat produit par le moteur dépends de 2 entrées à la main du développeur (le XML source, et le XSL) il est clair que l'imense majorité des problèmes sont à mettre sous la responsabilité dudit développeur.
Si je regarde le rendu à la suite d'une transfo effectuée via un navigateur, je ne retrouve pas forcémment mon doctype. C'est l'une des rares choses que j'ai pu rencontrer mais ça me semble essentiel pour la suite. Je ne peux en rapporter beaucoup n'ayant que peu d'expérience. Mes propos sont fondés sur mes lectures où j'ai pu voir entre autres qu'un certain nombre de processeurs n'implémentaient qu'une partie des recommandations. (Sablotron, XML::XSLT,...) Je laisse quand même le bénéfice du doute étant donné que ces moteurs évoluent plus vite que les bouquins mais...


a écrit :
Non c'est sérieux ? Mais tu imagines un process comprenant du XSL en charge d'automatiser la production de milliers de pages web et nécessitant une intervention manuelle ? Pour ton information il existe partout dans les entreprises des projets matures qui utilisent XSL pour produire automatiquement du code web adapté.
As-tu un exemple qui me montre comment procéder ? Bien sûr que non que je ne vois pas les développeurs intégrer un tel process pour traiter des milliers de pages ! Smiley lol Malheureusement, c'est quelquechose après quoi je cours depuis belle lurette mais que je n'ai trouvé nulle part avec des explications claires. Je ne suis pas développeur et n'ai jamais reçu de cours de ce type en informatique. Ces choses là sont loin d'être innées pour moi aussi et je ne trouve guère d'exemple concret dans mes lectures donc si tu as de quoi m'orienter pour me débloquer, je suis tout ouïe. Smiley cligne C'est justement ce qui fait que je n'ai jamais pu intégré correctement XML dans mes appli', ce que je trouve particulièrement démotivant lorsqu'on bosse dessus. Smiley confus


a écrit :
Par manque de maîtrise de la technologie...
Ces questions ont déjà été traitées sur de forum. Le premier item est relatif à un attribut de l'élément <xsl:output>, l'autre à l'emploi adapté des espaces de noms.
Oui, je n'ai testé ce moteur pour la première fois qu'avant hier et n'ai pas encore approfondi le sujet sur les espaces de noms. De plus, j'avoue ne passer que très rarement sur ce salon; je vais regarder de plus près du coup... Smiley smile


koala64 a écrit :
Pour le type indiqué dans le fichier xml, je mets text/xml et non text/xsl car ce dernier n'est pas standard et ne sert que pour la transformation puisse se faire via IE. Smiley smile
Xavier a écrit :
Incompréhensible. Je pense qu'il y a une grosse confusion derrière ceci. Smiley cligne
ben... Je me suis référé à "XML en concentré" 3ème édition p.128 où il est écrit :
a écrit :
Le pseudo-attribut type indique le type MIME de la feuille de style: (...) text/xml ou application/xml pour une feuille de style XSLT.
(...)
Internet Explorer de Microsoft utilise type="text/xsl" pour les feuilles de style XSLT. Cependant, le type MIME text/xsl n'a pas été et ne sera pas enregistré auprès de l'IANA. C'est une invention provenant de l'imaginaire de Microsoft. Dans le futur, application/xslt+xml permettra probablement d'identifier précisémment les feuilles de style XSLT
Je n'aurais pas du parler de standard en effet, je viens de voir ce qu'était l'IANA.

Bref, encore une fois, si tu as dans tes tiroirs quelquechose qui puisse me débloquer pour produire mes pages en direct sur le serveur et non en local, je t'en serais particulièrement reconnaissant parce que depuis le temps que ça dure, ce n'est pour moi que chimère... Smiley decu
Modifié par koala64 (05 Dec 2006 - 06:19)
Modérateur
a écrit :
Ces questions ont déjà été traitées sur de forum. Le premier item est relatif à un attribut de l'élément <xsl:output>, l'autre à l'emploi adapté des espaces de noms.
C'est bon. Corrigé. Merci de m'avoir orienté. Smiley cligne

Je laisse la correction... Smiley smile

XML
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="xslgrille.xsl" type="text/xml" ?>
<grille>
	<title>Grille</title>
	<entete id="gheader">
		<col name="Titre1">
			<fliste id="f">
				<element param="0" name="Choix1" />
				<element param="2" name="Choix2" />
				<element param="4" name="Choix3" />
			</fliste>
		</col>
		<col name="Titre2">
			<fliste id="g">
				<element param="5" name="Choix1" />
				<element param="8" name="Choix2" />
				<element param="20" name="Choix3" />
			</fliste>
		</col>
	</entete>
</grille>


XSLT
<?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"
		version="1.0"
		encoding="utf-8"
		[#red]omit-xml-declaration="yes"[/#]
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
		indent="yes" />
	
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
			<head>
				<title><xsl:value-of select="grille/title" /></title>
				<meta http-equiv="content-type" content="text/html; charset=utf-8" />
			</head>
			<body>
				<xsl:apply-templates select="grille/entete" />
			</body>
		</html>
	</xsl:template>

	<xsl:template match="entete">
		<xsl:for-each select="col">
			<h3 [#red]xmlns="http://www.w3.org/1999/xhtml"[/#]><xsl:value-of select="@name" /></h3>
			<ul [#red]xmlns="http://www.w3.org/1999/xhtml"[/#]>
				<xsl:for-each select="fliste/element">
					<li><a href="[#red]index.php?param={@param}[/#]"><xsl:value-of select="@name" /></a></li>
				</xsl:for-each>
			</ul>
		</xsl:for-each>
	</xsl:template>

</xsl:stylesheet>


XHTML généré
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
   <head>
      <title>Grille</title>
      <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
   </head>
   <body>
      <h3>Titre1</h3>
      <ul>
         <li>
            <a href="index.php?param=0">Choix1</a>
         </li>
         <li>
            <a href="index.php?param=2">Choix2</a>
         </li>
         <li>
            <a href="index.php?param=4">Choix3</a>
         </li>
      </ul>
      <h3>Titre2</h3>
      <ul>
         <li>
            <a href="index.php?param=5">Choix1</a>
         </li>
         <li>
            <a href="index.php?param=8">Choix2</a>
         </li>
         <li>
            <a href="index.php?param=20">Choix3</a>
         </li>
      </ul>
   </body>
</html>

Modifié par koala64 (04 Dec 2006 - 23:00)
Modérateur
Je retire ce que j'ai dit sur Sablotron... C'est nickel ! Smiley ravi (quoique, on verra à la longue, je suppose que si je l'ai lu, c'est parce qu'il y a bien problème quelquepart... Smiley langue pas ici en tout cas)

Je suis tombé sur ce document, et du coup en plaçant :
<?php
# Ouverture d'un gestionnaire XSLT
$xh = xslt_create();

# Tranformation des documents
$res = xslt_process($xh, 'index.xml', 'xslgrille.xsl');

# Fermeture du gestionnaire
xslt_free($xh);

# Affichage
echo $res;
?>
Je fais ma transfo côté serveur Smiley biggrin

(Faut pas le dire, ça faisait des mois que je cherchais, j'avais même lu ce document sans tiquer... suffisait de remettre ça sur le tapis ! champomi ! Smiley lol )
Modifié par koala64 (05 Dec 2006 - 09:26)
a écrit :
Je fais ma transfo côté serveur
Bravo !

Un petit coup de pouce pour ne pas arrêter le progrès : même si les processeurs xslt sont opérationnels aujourd'hui, certains sont meilleurs que d'autres. En l'occurrence, je crois que Sablotron est bien l'un des plus mauvais (performances médiocres, peu pratique...). Il a été abandonné complètement sous PHP5.
Comme tu utilises PHP je conseille vivement l'utilisation de la librairie libxslt (API XSL sous PHP5, et API DOM XML sous PHP4).
Modérateur
ok, merci... Je vais continuer de me renseigner... Smiley smile

Pour le moment, j'explore Relax NG, c'est... euh... terrible ! Smiley winner

Merci à ceux qui ont inventé ça... Smiley ravi
Modérateur
et hop ! avec l'API XSL... Smiley ravi

<?php

class Doc
{
	# Constructeur
	public function __construct()
	{
		self::__convert('test.xml', 'xslgrille.xsl');
	}
	
	# Transformation xslt d'un fichier xml
	private function __convert($xml, $xsl)
	{
		$DomXml = DOMDocument::load($xml);
		$DomXsl = DOMDocument::load($xsl);
		$process = new XSLTProcessor;
		$process->importStyleSheet($DomXsl);
		print $process->transformToXML($DomXml);
	}
}
$oDoc = new Doc;

?>

Promis, dorénavant, j'arrête de taper le xhtml à la main... Smiley biggrin

euh... Tu t'en sors conan76 ? Smiley rolleyes
Modifié par koala64 (05 Dec 2006 - 19:01)
Bonjour,

Eh bien j'ai vu des message arrivé dans mon mail toute la semaine Smiley cligne
désolé de ne pas répondre durant la semaine, le soir j'ai pas trop le temps (pas mal de route entre chez moi et le travail 2x74kms)

Je viens de faire le test avec le xml et xsl que tu as fourni Koala64, ca me semble bon, j'ai pas mal de questions/choix pour la génération de mes pages.

1) je vais généré donc une partie de ma page (la grille) via php (xml/xsl)
l'ajouter à ma page, rendre sur le navigateur.

2) l'utilisateur selectionne un filtre : "genre" valeur: id de science fiction.
3) appel via js/ou mon lien php Smiley cligne (mettons de coté le lien direct php)
4) je vais devoir retourné via ajax 2 choses qui changent:
- dans ligne filtre actif/colonne genre il faut que je mette "science fiction" (retourné par ajax/php et non pris parmi la liste de choix genre)
- mettre à jour la partie "données" de ma grille.

Ma question et donc la suivante Smiley langue eut-on omettre des parties ? car je n'ai pas besoin de regénérer l'ensemble de la grille (sauf pour le lien direct php).

Merci, d'avance, je risque d'être occupé ce week-end, je pourrais peut-être voir les réponses depuis un autre poste, car je vais là partir chercher un colis à la poste (onduleurs,Disques durs, powerball (cadeau de noel pour mon frère Smiley lol ) arrivé cette semaine, je vais donc devoir réinstallé mes PCs/serveurs car je "bascule" mes disques durs (recycle les "vieux").

J'en ai pas encore fini avec ma grille Smiley ravi
je préfére le dire que plutôt que l'on croit que j'ai ma réponse et que je fuis du forum Smiley cligne
Me revoici de nouveau opérationnel (merci au dernier bug de php et changement de version au niveau des fichiers pour que apache reconnaisse php)

Donc je me suis re-mis au xml et voici mon code xml et xsl, je pose les question après.

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="tab1.xsl" type="text/xml" ?>
<grille>
	<title>Grille</title>
	<entete id="gheader">
		<col name="Titre1">
			<fliste id="f">
				<element param="0" name="Choix1" />
				<element param="2" name="Choix2" />
				<element param="4" name="Choix3" />
			</fliste>
		</col>
		<col name="Titre2">
			<fliste id="g">
				<element param="5" name="Choix1" />
				<element param="8" name="Choix2" />
				<element param="20" name="Choix3" />
			</fliste>
		</col>
	</entete>
	<activeFiltre>
		<col value="filtre1" />
		<col value="filtre2" />

	</activeFiltre>
	<donnee>	
		<row>
		<col value="A" />
		<col value="B" />
		</row>
		<row>
		<col value="C" />
		<col value="D" />
		</row>
	</donnee>
</grille>


<?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"
		version="1.0"
		encoding="utf-8"
		omit-xml-declaration="yes"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
		indent="yes" />

	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
			<head>
				<title><xsl:value-of select="grille/title" /></title>
				<meta http-equiv="content-type" content="text/html; charset=utf-8" />
			</head>
			<body>
				<table border="1">
				<thead id="head">
				<xsl:apply-templates select="grille/entete" />
				</thead>
				<thead id="lgfiltre">				
				<xsl:apply-templates select="grille/activeFiltre" />
				</thead>
				<tbody>
				<xsl:apply-templates select="grille/donnee" />
				</tbody>
				</table>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="entete">
		<tr>
		<xsl:for-each select="col">
			<th>
			<h3 xmlns="http://www.w3.org/1999/xhtml"><xsl:value-of select="@name" /></h3>
			<ul xmlns="http://www.w3.org/1999/xhtml">
				<xsl:for-each select="fliste/element">
					<li><a href="index.php?param={@param}"><xsl:value-of select="@name" /></a></li>
				</xsl:for-each>
			</ul>
			</th>
		</xsl:for-each>
		</tr>
	</xsl:template>

	<xsl:template match="activeFiltre">
		   <tr>
		<xsl:for-each select="col">
		  <td><xsl:value-of select="@value" /></td>
		</xsl:for-each>
		</tr>
	</xsl:template>


	<xsl:template match="donnee">
	   <xsl:for-each select="row">
             <tr>
		<xsl:for-each select="col">
		  <td><xsl:value-of select="@value" /> </td>
		</xsl:for-each>
             </tr>
           </xsl:for-each>
	</xsl:template>

</xsl:stylesheet>


Le résultat resemble à ce que je veux faire (sans mise en forme) mais voici ce qui m'améne :
- Comment utiliser <fliste id="g"> l'id pour la variable de paramètre ? pour me donner un lien comme ceci : index.php?g=2
Attention plus compliqué (concerne les retours ajax) :
Quand je cliquerais sur le lien j'aurais un retour par ajax pour mettre à jour ma ligne de filtre, m'indiquant quel filtre est actif (seconde ligne de la grille) comment mettre à jour directement la cellule de la grille concerné ?
- Du fait du filtre les lignes supérieur à la troisième (tbody) pour les données doivent changer puis-je utiliser le même fichier xml ou dois-je créer 3 fichier xml/xsl, 1 par "section" (entete,filtre,donnée) ?

Merci de votre aide.