Anonymus Posté 12 Mai 2006 Posté 12 Mai 2006 Bonjour, J'ai 2 xml. L'un s'appelle a.php et l'autre b.php. Je souhaiterais que lorsque l'on appelle a.php, celui-ci appelle b.php, un peu comme les include classiques en php. Ca donnerait : <test> <balise1>coucou</balise1> <balise2>re</balise1> <balise3>coucou</balise3> // Là, mon include.. <balise4>coucou</balise4> <balise5>coucou</balise5> </test> A noter que j'affiches avec xsl ( pour l'instant.. ) Si vous aviez des idées (qui viendraient très probablement du xsl, mais bon.. )
robinsonvendredi Posté 13 Mai 2006 Posté 13 Mai 2006 En fait tout dépend des couches de traitement que tu as définies. Selon l'implémentation du DOM de php (que je ne connais pas), tu dois pouvoir modifier ton arbre test. Mon idée c'est de charger les deux XML et de les manipuler à l'aide du DOM (vois les methodes appendChild, insertBefore, removeChild, replaceChild cloneNode selon tes besoins), et lorsque c'est fait tu transformes le nouveau XML avec XSLT.
TheRec Posté 13 Mai 2006 Posté 13 Mai 2006 Euh, j'ai une question stupide, pourquoi tu n'utiliserais pas les "include" PHP justement ? (Je sais que ce sont des fichiers XML...mais si tu les nommes .php, il y a une raison, c'est que tu veux qu'il soient interprété par le parser PHP) J'ai peut être mal compris ce que tu veux faire, mais si tu veux que le contenu de b.php soit inclus dans a.php je ne vois pas ce qui t'empêche d'utiliser un include ...
Eclectik Posté 14 Mai 2006 Posté 14 Mai 2006 Tout à fait d'accord avec TheRec, tu peux très bien mettre un include çà ne devrait pas posé de problème je pense...
mamijo Posté 15 Mai 2006 Posté 15 Mai 2006 (modifié) A mon avis un include à la mode php déplaira au processeur XSL... Plus sûr (tant que XInclude ne fonctionne pas avec tous les processeurs) l'utilisation du noeud document dans le XSL : <?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:output method="xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" media-type="text/xml" indent="yes" /><xsl:template match="test"> <p>test d'include</p> <xsl:apply-templates /></xsl:template><xsl:template match="test/*"> <p><xsl:apply-templates /></p></xsl:template><xsl:template match="test/truc"> <p><xsl:apply-templates select="document(@nomdufichier)" /></p></xsl:template></xsl:stylesheet> + les lignes d'inclusion dans le fichier XML (qui peut s'appeler a.chose) dont j'ai nommé la balise <truc> (parce que j'avais envie) avec l'attribut nomdufichier (si tu veux href) : <?xml version="1.0" encoding="iso-8859-1" ?> <?xml-stylesheet type="text/xsl" href="trans.xslt"?><test><balise1>coucou</balise1><balise2>re</balise2><balise3>coucou</balise3> <truc nomdufichier="b.xml" /> <truc nomdufichier="c.xml" /><balise4>coucou</balise4><balise5>coucou</balise5></test> edit : suppression d'inutiles... Modifié 15 Mai 2006 par mamijo
TheRec Posté 15 Mai 2006 Posté 15 Mai 2006 Je ne vois pas en quoi le processeur XSL pourrait en souffrir... si éventuellement c'est parce que processeur a besoin de l'arbre complet pour commencer à travailler (il ne me semble que les processeurs en général attendent de l'avoir en entier pour commencer...enfin ça parait logique), il suffit de gérer le tampon (buffer) en PHP afin que les données ne soient plus envoyées à la volée mais en un bloc... Mais même sans ça je ne vois pas pourquoi le processeur XSL aurait des problèmes...tant que l'XML n'est pas récupéré en entier il aura de la peine à le parser. L'utilisation que tu fais de la fonction document pour inclure le fichier XML au moyen d'un template fonctionne...mais l'inclusion se fait côté client (à moins d'uriliser une technologie serveur avant d'envoyer le contenu au client),et non côté serveur...avec les avantages et inconvénient que cela implique.
mamijo Posté 15 Mai 2006 Posté 15 Mai 2006 L'utilisation que tu fais de la fonction document pour inclure le fichier XML au moyen d'un template fonctionne...mais l'inclusion se fait côté client (à moins d'uriliser une technologie serveur avant d'envoyer le contenu au client),et non côté serveur...avec les avantages et inconvénient que cela implique. <{POST_SNAPBACK}> Tu as raison, j'ai laissé trainer la ligne de déclaration du XSL dans le XML (cela me permet de travailler avec notepad et IE (exemple de transformation qui ne digère pas une inclusion php...) : <?xml-stylesheet type="text/xsl" href="trans.xslt"?> Cette ligne est inutile quand on utilise xslt_process (PHP) en donnant le nom du fichier de transformation et là ça fonctionne (maintenant il suffit d'adapter le XSL au résultat désiré, j'ai mis n'importe quoi comme balise de présentation) ; si on veut obtenir un fichier pur XML on utiliserait plutôt cela comme fichier XSL : <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" media-type="text/xml" indent="yes" /> <xsl:template match="test"> <machin> <xsl:apply-templates /> </machin> </xsl:template> <xsl:template match="*"> <xsl:copy-of select="." /> </xsl:template> <xsl:template match="test/truc"> <xsl:apply-templates select="document(@href)" /> </xsl:template> </xsl:stylesheet> L'intérêt est que le fichier XML peut ne pas avoir l'extension .php ; il peut même ne pas avoir d'inclusion dedans (cas des XML externes) et tout peut se faire dans le XSL. C'est aussi une question de gout et d'habitude : je préfére utiliser XSL pour générer du PHP et du Javascript plutôt que l'inverse => j'ai donc la conviction que c'est nettement moins fatigant
mamijo Posté 15 Mai 2006 Posté 15 Mai 2006 (modifié) J'oubliais le XML (sans la ligne en trop) : <?xml version="1.0" encoding="iso-8859-1" ?> <test><balise1>coucou</balise1><balise2>re</balise2><balise3>coucou</balise3> <truc href="../site/b.xml" /> <truc href="../site/c.xml" /><balise4>coucou</balise4><balise5>coucou</balise5></test> Modifié 15 Mai 2006 par mamijo
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant