IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] Transformer un xml en xsl


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Par défaut [XSLT] Transformer un xml en xsl
    Bonjour,

    Je cherche sur le net comment transformer un xml en une xsl.
    Est-ce possible ? je sais qu'il existe le "schematron" norme iso qui permet de faire cela mais le xml doit respecter une DTD particulière alors que mon fichier xml lui est simple.

    Auriez-vous une idée ?

    Merci d'avance,

    Ps : pour ceux à qui ca intéresse : www.schematron.com

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Tu pourrais développer ta question un peu , parce que là....

  3. #3
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Par défaut
    En fait, j'ai un fichier xml simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?xml version="1.0"?> 
    <?xml-stylesheet type="text/xsl" href="../xsl/phonebook.xsl"?>  
    <compilation>
    <mp3>
    <titre>Foule sentimentale</titre>
    <artiste>Alain Souchon</artiste> </mp3>
    <mp3>
    <titre>Solaar pleure</titre> <artiste>MC Solaar</artiste> </mp3>
    <mp3>
    <titre>Le baiser</titre> <artiste>Alain Souchon</artiste> </mp3>
    <mp3>
    <titre>Pourtant</titre>
    <artiste>Vanessa Paradis</artiste> </mp3>
    <mp3>
    <titre>Chambre avec vue</titre> <artiste>Henri Salvador</artiste> </mp3>
    </compilation>
    Et j'aimerai à partir d'une feuille xsl, générer une autre xsl.

    J'ai réussi à faire un petit truc qui à l'air de fonctionner :

    Ma feuille xsl de transformation est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ?xml version='1.0'?><?xar XSLT?>
     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">
     
    <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
    <xsl:template match="/">
      	<axsl:value-of select="/compilation/mp3/titre"/>
    </xsl:template> 
     
    </xsl:stylesheet>
    Ma feuille xsl de sortie est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-16"?><xsl:value-of select="/compilation/mp3/titre" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />

  4. #4
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Par défaut
    Dans mon xsl de sortie il manque tout de même la processing-instruction stylesheet....

    La génération n'est donc pas complète...

  5. #5
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Par défaut
    Bon en fait, <xsl:stylesheet> n'est pas un processing-instruction (désolée pour la mauvaise info!)

    Mais bon j'ai tout de même trouvé comment générer la balise <xsl:stylesheet>.

    Voici ma nouvelle xsl de transformation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version='1.0'?><?xar XSLT?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">
     
    <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
     
    <xsl:template match="/">	
    	<axsl:stylesheet>
      	<axsl:value-of select="/compilation/mp3/titre"/>  	
      	</axsl:stylesheet>
    </xsl:template> 
     
    </xsl:stylesheet>
    Voici ma feuille xsl de sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-16"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:value-of select="/compilation/mp3/titre" /></xsl:stylesheet>

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Que veux tu donc récupérer alors dans ton xml d'origine ?

  7. #7
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Par défaut
    Là en l'occurrence si je réapplique cette xsl de sortie sur mon entrée j'obtiendrai "Foule sentimentale".

    Comme ca ca peut paraitre tirer par les cheveux, mais mon problème initial était de transformer deux xml avec un xsl et ca se n'est pas possible je pense, car une xsl s'applique à un seul xml et non 2.

    ainsi, je m'étais dis qu'avec mon premier xml et ma xsl, faire un xsl à appliquer sur mon deuxième xml.

    Là c'était juste un test un peu "facile"

  8. #8
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par didine6393 Voir le message
    Comme ca ca peut paraitre tirer par les cheveux, mais mon problème initial était de transformer deux xml avec un xsl et ca se n'est pas possible je pense, car une xsl s'applique à un seul xml et non 2.
    Pas forcemment.
    si tu ne veux q'une seule sortie à partir de 2 XML tu peux soit utiliser la fonction document soit un passage de paramètre (là ça dépendra des processeurs tous ne permettent pas ce type de passage).

    Si tu veux 2 sorties pour tes deux xml je te conseille en + d'utiliser le processeur saxon et xslt 2.0.Cette version te permettra des sortie multiples

  9. #9
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Par défaut
    Ce que j'aimerai effectivement c'est d'avoir une sortie pour deux xml et je ne peux pas, je pense, utiliser document dnas mon premier xml car les deux xml ne sont pas stocké sur disque ce seront des flux du type InputStream.

    J'utilise pour cela SAXON.

    Est-ce une bonne idée?

  10. #10
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Il me semble que saxon permet le passage de noeud xml via le xsl:param du xslt.
    C'est une méthode de du processeur qui permet ça

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Si, en java, on peut préciser l''URIResolver' qui va se charger d'associer le chemin passé en paramètre de la fonction xsl document(), à un flux quelconque.
    J'ai plus le code sous la main, mais je l'ai déjà fait.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut Transformation d'un document XML transformé
    Je pensais trouver la réponse à ma question dans ce post mais finalement non.

    J'explique mon problème :
    Au final, je souhaite transformer un document XML2 en une page HTML2 grâce à une feuille de style XSL2.

    Sauf que certaines sources de données ne peuvent pas me fournir directement mon document XML2. Elles me fournissent donc un document XML1. Je m'occupe de transformer ce document XML1 en un document XML2 grâce à une feuille de style XSL1.

    Je bute toutefois sur un problème :
    Je souhaiterai que mon document XML2 généré à partir de XML1 grâce à XSL1 comporte l'instruction : <?xml-stylesheet type="text/xsl" href="./XSL2.xsl"?> pour que le document XML2 généré soit à son tour transformé en mon document final HTML2 par appel de la feuille de style XSL2.

    Pour ce faire, il faudrait que ma feuille de style XSL1 sache inclure cette instruction dans le document XML2 qu'elle a la charge de générer. Malheureusement, je n'y arrive pas. J'ai essayé de l'écrire de toutes ces façons sur mon fichier XSL 1:
    Façon 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="./XSL2.xsl"?>
    <xsl:stylesheet...
    </xsl:stylesheet>
    Façon 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet ....
    >
    <?xml-stylesheet type="text/xsl" href="./XSL2.xsl"?>
    <xsl:template match="/ns:root">
    ...
    </xsl:template>
    </xsl:stylesheet>
    Façon 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet ....
    >
    <xsl:template match="/ns:root">
    &lt;?xml-stylesheet type="text/xsl" href="./XSL2.xsl"?&gt;
    ...
    </xsl:template>
    </xsl:stylesheet>
    Il n'y a rien à faire, c'est instruction est tout bonnement ignorée. Si quelqu'un pouvait me dire un, si ce que je veux est possible, deux le cas échéant comment, je lui serai très reconnaissant.

    Pour récapituler mon problème : je veux pouvoir passer d'un document XML1 à ma page HTML2 via deux transformations successives XSL1 et XSL2 (et sans ajout programmatique tiers (type un programme java)).
    Je sais que je pourrais très bien faire une seule feuille XSL' à la place de XSL1 et XSL2 pour passer directement de XML1 à HTML2, mais comme je l'expliquais, je dispose de deux sources de données, l'une me générant des documents XML1 (sur la structure desquels je n'ai pas la main), l'autre des documents XML2 et je souhaite que ma feuille XSL2 reste mon unique fichier de référence pour la production de HTML2.

    Merci de votre aide.

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Hello,
    Tu peux utiliser ça avant de créer le noeud raçine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:processing-instruction name="xml-stylesheet">
        <xsl:text>href="blabla. xsl" type="text/xsl"</xsl:text>
      </xsl:processing-instruction>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FF][XSLT][JS] Affichage xml via xsl sous Mozilla
    Par Eileen dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 26/04/2007, 12h13
  2. [XSLT] Transformer un xml en HTML : problème sur les liens
    Par elhout dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/03/2007, 10h46
  3. [XSLT] Transformer plusieurs XML en même temps
    Par oamram dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/04/2006, 13h41
  4. [XML][XSLT] transformer le xml en binaire via une xslt
    Par chama dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/07/2005, 11h42
  5. [XSLT] transformation XHTML->XML
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 23/05/2005, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo