Aller au contenu

[XSL] fonction document


mathmax

Sujets conseillés

Bonjour,

Je cherche à faire appel à une page XML depuis une feuille XSL. J'utilise pour celà la fonction Xpath document(). Cela marche bien quand je fais ma transformation côté client, mais ne marche en revanche plus dès que j'insère mon fragment XSLT dans une page dynamique (que je mette le chemin vers le XML en absolu ou en relatif). Avez-vous une idée du problème ?

merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

tu veux dire une page de XSL ?

si c'est ça que tu veux, je crois que ce code te suffit :

<xsl:value-of select="document('http://www.orkos.com/Portals/_XML_XSL/F_Eu.xml')//Root/CalendarGroup/CalendarList/CalendarItem/CalendarCountry" />

mais ce code ne pose pas de problème pour les transformation côté client. En revanche il ne fonctionne pas si j'insère un fragment XSLT le contenant dans une page dynamique. Dans mon cas, j'ai fais cette transformation à l'aide de Dreamweaver qui me génère un fichier vb.net pour la conversion.

Tu peux le voir ici si tu veux :

http://www.orkos.com/tests/MM_XSLTransform.txt

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Pas de message d'erreur. En revanche le framework 2 est bien installé chez moi. je fais régulièrement tourner de programme issue de la plateforme .Net sur mon ordinateur. En fait, on dirait que la fonction document() n'est pas interprétée et donc le chemin n'étant pas valide, la balise <xsl:value/> ne retourne aucune valeur.

Voici un exmple que j'ai fais afin de bien cibler le problème :

J'ai crée dans un même dossier :

- 2 pages XML noms.xml et commentaires.xml qui ont réspectivement les structures suivantes :

<Root>
<Item>
 <Nom>Nom1</Nom>
</Item>
<Item>
 <Nom>Nom2</Nom>
</Item>
...
</Root>

et

<Root>
<Item>
 <Commentaire>commentaire1</Commentaire>
</Item>
<Item>
 <Commentaire>commentaire2</Commentaire>
</Item>
...
</Root>

- 1 feuille XSL test.xsl. Entre les balises template, j'ai mis :

<p><xsl:value-of select="Root/Item/Nom"/></p>
<p><xsl:value-of select="document('http://www.orkos.com/tests/commentaires.xml')//Item/Commentaire"/></p>

(donc un appel à Nom (dans noms.xml) directement et un appel à commentaire (dans commentaires.xml) par le biais de la fonction document()).

- 1 page dynamique test.aspx dans laquelle je fais appel à mes document noms.xml et test.xsl et que je transforme grâce au fichier MM_XSLTransform.vb. Voilà à quoi ressemblent ces appels :

<body><%
Dim mm_xsl As MM.XSLTransform = new MM.XSLTransform()
mm_xsl.setXML(Server.MapPath("noms.xml"))
mm_xsl.setXSL(Server.MapPath("test.xsl"))
Response.write(mm_xsl.Transform())
%></body>

Maintenant je fais les tests suivants :

Dans mon fichier noms.xml, j'ai ajouté un lien vers la feuille test.xsl.

Quand j'appelle noms.xml dans le navigateur, l'obtiens ceci.

Le nom s'affiche correctement. Dans la feuille XSL, la fonction document() est également correctement intérprétée car mon commentaire s'affiche bien en dessous du nom. Jusqu'ici tout fonctionne donc nomralemement.

Maintenant j'éxécute la page test.aspx qui je le rapelle fais appel à noms.xml et test.xsl. J'obtiens ceci. Ici le commentaire ne s'affiche pas. La fonction document() ne semble pas être interprétée. Le chemin Xpath

document('http://www.orkos.com/tests/commentaires.xml')//Item/Commentaire

est pourtant correct puisque le commentaire s'affichait lors de l'éxécution directe de noms.xml.

Et c'est là que je ne comprends pas pourquoi dans le deuxième cas, ma fonction document() n'est pas intérprétée... Une explication ?

Je mets ici un zip contenant tout l'exemple (y compris le doc vb de transformation), c'est peut-être plus clair d'étudier ça en local.

Merci d'avance pour votre aide.

Modifié par mathmax
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

Veuillez vous connecter pour commenter

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



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