bonjour,
j'ai suivi avec intérêt un fil de discussion précédent sur l'inclusion de fichiers XML dans un autre fichier XML.
En effet, j'essaie d'inclure un menu en xml dans les diverses pages XML de mon site. Pour cela, j'essaie de rapatrier le code du fichier menu.xml dans la feuille de transformation xslt. J'utilise la fonction document()

Ca marche assez bien avec Internet explorer par contre, Firefox place tous les items du menu sur une même ligne. Donc, c'est inexploitable...

Voici un extrait de menu.xml


...
<ul>
<li><a href="index.xml">Accueil</a></li>
<li><a href=""></a></li>
</ul>
</td></tr>	
<tr><th>Historique</th></tr>
<tr><td>
<ul>
...


Et un extrait de la feuille xslt "intégratrice"


...
<xsl:template match="menu">
<div id="toc">
<xsl:copy-of select="document('menu.xml')/menu/* " />
</div>	
</xsl:template>
...

(je précise qu'il y a une balise <menu /> dans le document xml associé à la feuille de transformation xslt.

Pourriez vous me dire ce qui pose problème pour Firefox ? A nouveau, je précise que c'est OK avec Internet explorer.

Merci d'avance,

Mignon
Modifié par mignon (09 Aug 2007 - 22:24)
Administrateur
mignon a écrit :
problème résolu...

Bravo, dans ce cas il faudrait l'indiquer en modifiant ton titre (relire les règles du forum à ce sujet Smiley cligne ).
à l'invitation de Raphaël, je comlmente ici la solution trouvée:

1° : le problème rencontré provenait d'un bout de code que j'avais récupéré dans un autre fil de discussion :
<xsl:copy-of select="document('menu.xml')/racine/*" />

Avec ce code, tout le menu est recopié sans tenir compte des instructions de transformation fournies par la suite.

2° : la solution trouvée sur xml.org
<xi:include ... xmlns:xi= ...> 

cette solution a été rapidement abandonnée puisqu'elle n'est pas reconnue par les navigateurs et que le traitement doit se faire côté serveur...

3°: LA solution consistait simplement à pointer vers l'élément racine du document inclus via la fonction document() puis à appliquer le template à parti de cette racine:

<xsl:apply-templates select="document('menu.xml')/racine" /> 
(...)
<xsl:template match="racine">
(...)

Seul revers de la médaille: Opera ne reconnaît pas la fonction document().