Aller au contenu

Sujets conseillés

Posté

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.. )

Posté

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.

Posté

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 ...

Posté (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é par mamijo
Posté

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.

Posté
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=&quot;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

Posté (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é par mamijo

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...