capacité de sortie d une feuille de style

capacité de sortie d une feuille de style - XML/XSL - Programmation

Marsh Posté le 21-04-2003 à 14:27:17    

Je voudrais pouvoir sortir plusieurs fichiers au format xml grace à une xsl. Est ce possible?
J'ai vu que xsl:output ne pouvait etre dans un xsl:template et dans mon cas ça m aurait bien aidé :( . En gros, ce que je veux faire ressemble à ça :  
plusieurs XML + une XSL -> plusieurs XML


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 21-04-2003 à 14:27:17   

Reply

Marsh Posté le 21-04-2003 à 15:26:31    

Une transformation s'applique à un document pour en produire un autre.
Donc ton cas tu peux faire n transformations.
Ou bien créer un super document en agrégeant les autres.

Reply

Marsh Posté le 21-04-2003 à 16:12:44    

Bah, je m explique un peu plus précisement. Je veux automatiser un merge entre un peu plus de 200 fichiers. J'ai créé un fichier xml de correspondance entre les fichiers que je veux merger et ma feuille de style après prend en parametre chaque fichiers à merger et me donne un fichier résultat du merge. Cependant, xsl me colle tous mes résultats dans un meme fichier xml (le merge des 200 fichiers).
Oui je pourrais faire une centaine de xsl avec juste les noms des fichiers qui changent et là dans ce cas, j aurai un seul fichier xml à chaque fois mais ça serait hyper lourd! :pt1cable:  
Je voudrais donc si possible n utiliser qu une feuille de style qui en entrée me prend tous les documents (ça c est fait) et qui en sortie me sort chaque fichier xml résultat du merge.
Je fais le merge à chaque fois entre 2 xml donc mon schéma que je voudrais réaliser ressemble à :
100 XML de type a + 100 XML de type b + 1 XSL -> 100 XML de type res
Au début, je pensais que l on pouvait à l intérieur d'un xsl:for-each ... faire un xsl:output ... mais ce n est pas le cas! :sarcastic:  
Si quelqu un a une idée...j ai entendu parler de xalan qui pourrait le faire?


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 21-04-2003 à 16:21:43    

Je sais pas quel processeur XSLT tu utilises.
Sous windows, avec MSXML tu pourrais faire un script (en vbscript par exemple) qui ferait la transformation pour chaque fichier.

Reply

Marsh Posté le 21-04-2003 à 16:25:59    

Je ne sais pas quel processeur xslt j utilise, j utilise juste xml spy et je teste mes transformations avec ce programme.
Désolé mais je ne sais pas faire de vbscript :(


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 21-04-2003 à 16:27:25    

Tu peux aussi le faire en python (via les extensions COM) :D

Reply

Marsh Posté le 22-04-2003 à 13:06:21    

Ce doit effectivement être possible avec Xalan. L'idée étant de définir toi même des fonctions que tu appelles depuis ta feuille de style et qui sont codées dans un autre langage (Java par exemple). Il y a quelques exemples sur le site de Xalan.

Reply

Marsh Posté le 23-04-2003 à 01:28:40    

Si vous avez des exemples, je suis preneur de sites web à propos de Xalan et de XSLT.  
J ai commencé à écrire un prog en java avec l aide de xalan mais je cherche à faire du xpath sur un fichier xml pour récupérer des données à l intérieur de mon programme java  :sweat:  pas encore trouvé comment faire! (haaa si ils avaient prévu plusieurs output pour les feuilles de style pfff)


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 14:10:32    

j'ai pas testé, mais as tu essayé :
 
<xsl:document> ?
 
je regarde la définition et y a marqué : "...cette fonction permet à une transformation de produire plusieurs fichiers de sortie et ainsi vous pouvez écrire une feuille de style qui répartit un fichier XML volumineux en ptits fichiers XML, ou en plusieurs fichiers HTML associés les uns au autres par des liens hypertexte"
 
extrait d'XSLT 2nde édition - Michael Kay. page 221
 
peut être peux tu envisager de l'utiliser dans un XLST traitant ton gros fichier XML mergeant les 200 fichiers ?

Reply

Marsh Posté le 23-04-2003 à 15:35:45    

ha je vais faire une pause dans xalan alors! Je vais regarder les capacité de xsl : document  
Merci l ami :jap:


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 15:35:45   

Reply

Marsh Posté le 23-04-2003 à 16:31:30    

ah oui, petite remarque :
 
"il s'agit d'une nouvelle instruction introduite dans le préversion de la recommandation XSLT 1.1, mais des fonctions similaires sont disponibles de manière propriétaire dans plusieurs processeurs XSLT 1.0 courants"
 
tiens, un exemple extrait du même bouquin :
 
le fichier XML en entrée :
 


<poem>
<author> Rupert Brooke</author>
<date>1912</date>
<title>Song</title>
<stanza>
<line>Truc</line>
<line>Bidule</line>
</stanza>
<stanza>
<line>...</line>
<line>...</line>
...
</poem>


 
et la feuille de style XSLT permettant un document de sortie différent pour chaque strophe ou "stanza" :
 


...
<xsl:template match="stanza">
<xsl:variable name="file" select="concat('verse', position(), '.xml')" />
<verse number="{position()}" href="{$file}" />
<xsl:document href="{$file}"><xsl:copy-of select="." /></xsl:document>
</xsl:template>
...


 
Bref, c'est assez facile à utiliser non ?!


Message édité par chocoboy le 23-04-2003 à 16:33:46
Reply

Marsh Posté le 23-04-2003 à 16:33:05    

Tu vas rire, j ai trouvé quasiment le meme exemple sur le net et je suis en train de l adapter à mon probleme lol...le monde est petit :love:


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 16:47:53    

il faut juste mettre  
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1"> pour utiliser XSLT 1.1???
 


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 16:53:07    

Car j ai essayé et en résultat j ai ça
 
<?xml version="1.0" encoding="UTF-8"?>
<verse number="1" href="verse1.xml"/>
<verse number="2" href="verse2.xml"/>
...
 
et aucune création de fichier :(
d ailleurs il gueule car le fichier n est pas bien formé à la fin de <verse number="1" href="verse1.xml"/> il attend du commentaire...en gros il comprend pas la suite!
C est pour ça que je demande si le bon xslt est lancé


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 17:11:04    

je sais pas... j'ai testé et ça marche très bien... c'est pratique d'ailleurs !
 
je l'ai testé rapido avec Saxon 6.2.2
 
avec  
 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

Reply

Marsh Posté le 23-04-2003 à 17:11:47    

balance ton XML et XSLT pour voir si y a pas d'erreur ?

Reply

Marsh Posté le 23-04-2003 à 17:15:31    

bah en fait, j essaye de faire marcher ton petit exemple mais je ne sais pas comment tu testes (moi c est avec xmlspy alors je sais pas trop quel processeur il prend) tu pourrais me dire comment faire avec saxon (ligne de commande?).
Je viens de télécharger saxon 6.5.2 à l instant meme.


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 17:21:39    

t'as les 2 fichiers :
test.xml et test.xsl
 
tu fais :
 

saxon test.xml test.xsl > out.html


 
par exemple...
 
Ca va te créer normalement :
out.xml
verse1.xml
verse2.xml
 
enfin, l'exemple que j'avais donnée n'était pas complet, à toi de rajouter le début dans le XSLT, genre le <xsl:template match="poem">...etc pour te créer tout le corps de ton HTML de sortie plus les liens... c'est vite fait...

Reply

Marsh Posté le 23-04-2003 à 17:26:27    

par exemple :
 


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<xsl:template match="poem">
<html>
<body>
 <xsl:apply-templates />
</body>
</html>
</xsl:template>
 
<xsl:template match="author|date|title">
<p><xsl:value-of select="concat(name(), ' : ', .)" /></p>
</xsl:template>
 
<xsl:template match="stanza">
<xsl:variable name="file" select="concat('verse', position(), '.xml')" />
<p><a href="{$file}"><xsl:value-of select="$file" /></a></p>
<xsl:document href="{$file}"><xsl:copy-of select="." /></xsl:document>
</xsl:template>
 
</xsl:stylesheet>

Reply

Marsh Posté le 23-04-2003 à 17:31:21    

... faut par mettre la majuscule au "d" de

<xsl:document>

... c'est le forum qui le fait automatiquement (comment on désactive ça ?)... au cas ou ce serait ça qui te fasse foirer...


Message édité par chocoboy le 23-04-2003 à 17:32:01
Reply

Marsh Posté le 23-04-2003 à 17:31:40    

Je suis en train d insatller saxon (y a juste le classpath à changer apparemment)


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 17:32:56    

... je sais pas, moi j'ai juste saxon.exe et rien à modifier ...

Reply

Marsh Posté le 23-04-2003 à 17:34:32    

j ai pas de saxon.exe moi dans ce que j ai téléchargé


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 17:38:48    

Reply

Marsh Posté le 23-04-2003 à 17:43:22    

ha je crois que je tiens le bon bout avec ton saxon.exe il m a créé verse8.xml et verse10.xml (bizarre les nombres)


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le 23-04-2003 à 17:45:51    

c'est pas grave, c'est à cause du raccourci que j'ai pris en faisant

<xsl:apply-templates />


 
Pour les avoir bien numérotés, t'as qu'à remplacer cette ligne par :
 


<xsl:apply-templates select="author|date|title" />
<xsl:apply-templates select="stanza" />


Message édité par chocoboy le 23-04-2003 à 17:46:12
Reply

Marsh Posté le 23-04-2003 à 17:54:29    

De toute façon, j utilise d autre nom pour mes fichiers qu une numérotation. Je viens de tester sur mon exemple et ça marche nickel  :bounce:  :bounce:  :bounce:  
Merci à toi chocoboy :jap:  :jap:  :jap: et vive xslt :love:


---------------
Mise à jour du palmarès des crash : 1 lecteur CD, 1 lecteur disquette, 1 graveur, 1 CM, 3 DD IBM40Go, 1 DDR256MoPC2100 et une alim Fortron... à qui le tour? :)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed