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 :

[XSL] Application d'un XSL pour produire un XSL... help


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 63
    Points : 68
    Points
    68
    Par défaut [XSL] Application d'un XSL pour produire un XSL... help
    Voici mon probleme : je suis en train de créer une stylesheet XSL (que l'on va appeler "XSL de paramétrage") qui a la particuliarité de produire... un document XSL (que l'on va appeler "XSL final").

    Dans les faits, je commence par génerer (avec du code Java) un Document contenant un formulaire encadré par un début et une fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <root>
      <start/>
      <form>
        <table>
          <!-- le contenu de mon formulaire : de l'HTML pour l'instant que l'on va enrichir -->
        </table>
      </form>
      <end/>
    </root>
    Le but de ma feuille de style est de produire a partir de ce document un formulaire XSL où :
    - <start/> sera remplacé par un certain nombre d'imports/déclarations de scripts contenant eux meme des instructions XSL
    - idem pour <end/>
    - l'élément <form>, qui contient le code HTML pur du formulaire a produire, sera recopié dans le XSL final et éventuellement enrichi avec des instructions XSL : par exemple on rajoute aux boutons un attribut "onClick" dont la valeur sera de la forme "<xsl:value-of select="..."> où "..." sera lié au XML final (qui référence le XSL final)

    Donc en résumé je fais un meta-XSL ("XSL de paramétrage") dont l'intéret est de permettre de paramétrer le contenu du fichier XSL final.

    Ce qui me pose probleme, c'est que dans ce meta-XSL j'ai des instructions <xsl:element> ou <xsl:attribute> (pour l'insertion de nouveaux éléments dans l'XSL final) contenant elles memes des instructions XSL (qui apparaitront dans l'XSL final).

    Exemple :
    je veux insérer TEL QUEL dans mon XSL final (= sans que les instructions XSL mentionnées ici soient exécutées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <link rel="stylesheet" type="text/css">
          <xsl:attribute name="href">
            <xsl:value-of select="/PAGE/DATA/PATH/@rootPath"/>css/Base.css
          </xsl:attribute> 
    </link>
    La question que je me pose, c'est comment je peux indiquer "en dur" (en chaines de caracteres, en gros) ces instructions XSL qui ne doivent être que recopiées dans l'XSL final et non pas interprétées ?

    Pour l'instant, j'ai essayé d'insérer cela dans des blocs CDATA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <![CDATA[<link rel="stylesheet" type="text/css">]]>
      <![CDATA[<xsl:attribute name="href">]]>
        <![CDATA[<xsl:value-of select="/PAGE/DATA/PATH/@rootPath"/>css/Base.css]]>
      <![CDATA[</xsl:attribute>]]>
    <![CDATA[</link>]]>
    Dans ce cas je me retrouve avec des "&" et "&" à la place des "<" et ">" dans mon XSL final, ce qui ne va pas.

    J'ai également essayé d'utiliser des instructions <xsl:text> qui possèdent visiblement de quoi résoudre ce probleme grâce a l'attribut "disable-output-escaping". Malheureusement celui-ci n'est pas reconnu par mon transformateur XSL (javax.xml.transform.Transformer)

    Il est bien évidemment possible de créer à la main mes éléments XSL au moyen des instructions "xsl:element" et "xsl:attribute", mais ceci rend le XSL de paramétrage long a mettre au point et compliqué à lire et modifier, ce qui réduit à néant son interet...

    Si vous avez une idée...

  2. #2
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    ex pour produire une balise template dans une feuille xsl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="start">
    <xsl:element name="xsl:template">
          <xsl:attribute name="match">bidule</xsl:attribute>
          <xsl:attribute name="xml:space">preserve</xsl:attribute>
          <xsl:apply-templates/>
       </xsl:element>
    </xsl:template>
    le document :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <start>
     <bidule>
        youpi
     </bidule>
    </start>
    va donner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="bidule" xml:space="preserve" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       youpi
    </xsl:template>
    intéressant non? je n'ai pas bien saisi l'utilisation que tu vas en faire. Pourquoi des meta-xsl? Tes règles de transformations ne sont-elles pas connues au départ?
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Mon "meta-XSL" va servir a paramétrer facilement le contenu du XSL final, sachant que le document sur lequel on applique le meta-XSL est généré automatiquement par une appli java (l'utilisateur doit pouvoir modifier ce qui est ajouté dans le XSL final sans retoucher le code <=> en modifiant le meta-xsl).
    Ce que j'entends par "paramétrer" ici, c'est par exemple pouvoir ajouter facilement une déclaration de ce style (dans le XSL final) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <link rel="stylesheet" type="text/css"> 
          <xsl:attribute name="href"> 
            <xsl:value-of select="/PAGE/DATA/PATH/@rootPath"/>css/Base.css 
          </xsl:attribute> 
    </link>
    Or avec la méthode mentionnée précédemment, il faut alors ajouter ceci dans le meta-XSL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <link rel="stylesheet" type="text/css">
      <xsl:element name="xsl:attribute">
        <xsl:attribute name="name">href</xsl:attribute>
          <xsl:element name="xsl:value-of">
            <xsl:attribute name="select"><xsl:text>/PAGE/DATA/PATH/@rootPath</xsl:text></xsl:attribute>
          </xsl:element><xsl:text>css/Base.css</xsl:text>
       </xsl:element>			
    </link>
    Tu conviendras que ce n'est pas tres lisible. Ce que je voudrais c'est pouvoir insérer dans le meta-xsl le bloc a ajouter au xsl final et le copier directement dans ce dernier, sans que les éventuelles instructions <xsl:...> ne soient interprétées (puisqu'elles sont destinées au XSL final).
    Je suis plus clair là ?

  4. #4
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    effectivement c'est pas très lisible mais je ne sais pas si il existe un autre moyen. peut-être un truc pas très lisible non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:text>& lg;truc& gt;incompréhenssible& lg;/truc& gt;</xsl:text>
    Si tu te sers d'un meta-xsl pour construire des feuilles xsl paramétrées, je ne vois pas pourquoi tu n'utilises pas xsl:param à la place.
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Je n'ai peut etre pas employé le bon terme en parlant de "feuilles paramétrées". Ce que je cherche à faire c'est pouvoir insérer dans ce meta-xsl des éléments à copier dans l'XSL final.

    En gros mon programme fait ca :
    meta-XSL
    Doc XML ======> Doc XSL
    Mon doc XML contient un élément <start>, un élément <form> contenant du code HTML a recopier dans le doc XSL final et un élément <end>
    Mon "meta XSL" remplace les éléments start et end par des éléments XSL (le contenu de certains dependant du contenu du doc XML). Ce que je voudrais, c'est que ces éléments XSL soient directement spécifiés dans le meta-XSL, de telle sorte que pour produire un nouvel XSL final, il ne faille que copier dans le meta-XSL la nouvelle liste d'éléments à insérer et réappliquer celui-ci au doc XML.

    Ce matin j'ai testé l'élément XSL <xsl:namespace-alias> qui avait l'air de pouvoir m'aider (remplacer un namespace par un autre), mais en fait non : il remplace l'URI d'un namespace par une autre, alors que ce qui aurait pu m'aider c'est de remplacer un préfix par un autre (par exemple je donnerai le prefix "temp:" aux éléments xsl et l'application du meta-xsl le transformerait en "xsl:" dans le document final...

Discussions similaires

  1. [XSL] Enlever l'attribut xmlns pour une transf. XSL
    Par Acalon dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 24/04/2006, 14h21
  2. [xsl][xalan]Demande d'aide pour un comptage
    Par HomoErectus dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/09/2005, 09h22
  3. Utilisation de MSXML pour la transformation XSL
    Par Supergizmo dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 25/07/2005, 14h02

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