Utilisation de la librairie redirect [Résolu][XSLT] - XML/XSL - Programmation
Marsh Posté le 17-07-2008 à 09:18:31
Je connais pas vraiment cette extension propriètaire qu'est redirect:write mais une recherche rapide me dit qu'il y a aussi un <redirect:open> and <redirect:close> qui permettent de gérer finement l'ouverture des fichiers...
Marsh Posté le 17-07-2008 à 09:55:10
Merci avander, car je connaissais l'existence des deux balises open et close mais tu m'as mis la puce à l'oreille. En effet, chaque instruction write ouvre, écrit et ferme le document. C'est l'ouverture qui provoque l'insertion de <?xml version="1.0" encoding="UTF-8"?>. J'ai donc mis, dans le template d'élément racine de ma feuille xslt le code suivant:
Code :
|
Ainsi, le document n'est ouvert qu'une seule fois. Voici donc une partie du fichier citations.xml produit:
Code :
|
Un de mes problèmes a donc été résolu.
Cependant, il reste le problème que ce fichier n'a pas d'élément racine: je ne peux donc pas le parcourir et le lire.
L'idée est d'insérer le tag <section> à l'ouverture et le tag </section> avant la fermeture (-> cf commentaires dans première partie du code). Mais je n'y arrive pas car <section> est interprété comme une balise de ma feuille de style et doit être fermée correctement. J'ai également essayé:
- avec les caractères < et > au lieu de < et > mais ils apparaissent tel que dans le fichier citations.xml.
- avec un <xsl:value-of select="<section>"> mais les caractères < et > ne sont pas permis dans cette construction
- avec du coup <xsl:value-of select="<section>" /> mais une erreur me dit qu'on ne peut pas insérer de noeuds dans XPath, seulement avec XQuery
Est-ce que quelqu'un a une idée pour insérer l'élément racine? J'espère que oui, car je suis proche du but... Merci.
Marsh Posté le 17-07-2008 à 10:07:12
samalairbien a écrit : Merci avander, car je connaissais l'existence des deux balises open et close mais tu m'as mis la puce à l'oreille. En effet, chaque instruction write ouvre, écrit et ferme le document. C'est l'ouverture qui provoque l'insertion de <?xml version="1.0" encoding="UTF-8"?>. J'ai donc mis, dans le template d'élément racine de ma feuille xslt le code suivant: |
Regarde cet exemple ça me semble assez proche... http://xml.apache.org/xalan-j/apid [...] irect.html
Marsh Posté le 17-07-2008 à 10:23:10
avander a écrit : |
Ca n'est pas vraiment proche au sens où, dans cet exemple, l'écriture se fait de manière continue, alors que moi elle se fait en plusieurs fois. Ce que je veux faire et qui me pose problème est ce qui suit:
Code :
|
Or, le tag <section> doit être fermé avant le premier </redirect:write> pour que ma feuille de style soit valide. Et le <xsl:apply-templates /> doit se trouver en dehors de <redirect:write>. Il faut donc trouver un autre moyen de faire la même chose...
Marsh Posté le 17-07-2008 à 10:49:01
Code :
|
Non?
Marsh Posté le 17-07-2008 à 11:45:17
Ah oui en effet c'était aussi simple que ça. Je sais pas pourquoi je croyais que ça ne fonctionnait pas...
En tout cas, un énorme merci à toi Avander! Tu m'as enlevé une gorsse épine du pied... même si tu ne connaissais pas plus que ça la librairie redirect!
A bientôt peut-être
Marsh Posté le 15-07-2008 à 15:35:11
Bonjour à tous.
J'ai une question relative à la librairie redirect de XSL qui permet à une feuille de style d'écrire dans un fichier externe en parallèle du traitement de la sortie. J'arrive bien à écrire dans un fichier externe, mais le problème c'est que la sortie produite n'est pas très lisible (en particulier, ce n'est pas un document xml valide puisqu'elle n'a pas d'élément racine). Voici le but de l'utilisation de redirect: je souhaite relever tous les documents référencés à l'intérieur de l'élément <citation> dans mon fichier xml en entrée de ma feuille de style.
Voici le bout de ma feuille de style qui fait allusion à redirect:
Voici un bout du fichier produit:
Or, je souhaiterais organiser l'information, de sorte à regrouper les para qui sont dans des sections qui ont le même rôle, de la façon suivante:
Les deux points impératifs sont:
J'espère que je suis assez clair... Merci d'avance pour votre aide.
Message édité par samalairbien le 17-07-2008 à 11:46:08