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 :

Inclure, dans un XSLT, un XML en prennant en compte les règles XSLT de ce fichier XML [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut Inclure, dans un XSLT, un XML en prennant en compte les règles XSLT de ce fichier XML
    Bonjour,

    Je débute tout juste en XSLT et je suis en train de tenter de créer un petit site en XML/XSLT/CSS pour m'amuser un peu.

    Pour le moment j'ai :
    • index.xml : ma première page ;
    • structure.xsl : la structure par défaut de mes pages (utilisé par index.xml) ;
    • menu.xml : un menu ;
    • menu.xsl : la structure de mon menu (utilisé par menu.xml) ;
    • quelques fichiers css.


    Sauf que maintenant, j'aimerais que structure.xsl inclus menu.xml pour afficher le menu de ma page.
    Pour cela j'utilise xsl:copy-of mais les règles de menu.xsl ne sont pas incluses.

    Je pourrais alors utiliser xsl:import ou xsl:include pour ajouter les règles de menu.xsl à structure.xsl mais je m'y refuse par principe d'encapsulation :
    Pour moi, structure.xsl ne dois qu'inclure les fichiers xml correspondant à divers éléments (ex. menu, zone de news, zone d’identification), et c'est à ces fichiers xml qu'incombe la responsabilité de leur propre affichage via le(s) fichier(s) xslt qu'ils auront choisi.

    Grosso-modo, structure.xsl inclue menu.xml et menu.xml se débrouille pour s'afficher correctement.
    Par contre, je vois mal comment faire .


    Sinon, pensez-vous qu'au lieu d'inclure un fichier.xml qui aura la responsabilité d'inclure les fichiers xsl nécessaire à son affichage, je ferais mieux, à la place, d'inclure un fichier.xsl qui aura la responsabilité d'inclure le fichier xml (et les fichiers xsl) nécessaire ?


    Merci d'avance pour vos réponses.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Sinon, pensez-vous qu'au lieu d'inclure un fichier.xml qui aura la responsabilité d'inclure les fichiers xsl nécessaire à son affichage, je ferais mieux, à la place, d'inclure un fichier.xsl qui aura la responsabilité d'inclure le fichier xml (et les fichiers xsl) nécessaire ?
    Oui.

    Tu peux estimer tous les principes d'encapsulation que tu veux, mais XSLT fonctionne comme il fonctionne et pas autrement.
    Demander à un xml qu'on inclut de savoir lui-même quelles règles déterminent sa transformation, c'est de la réaction dynamique. Et faire en sorte d'appliquer les dites règles au lieu d'inclure le XML tel qu'il est, ça nécessite de programmer XSLT en XSLT (ou, du moins, d'utiliser des extensions non-standard qui le font déjà.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    Mon code actuelle marche plutôt bien :

    structure.xsl
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
        <xsl:import href="xsl/menu.xsl"/>
     
        <xsl:output method="html" />
     
        <xsl:template match="/">
            <HTML>
                <HEAD>
                    <LINK rel="stylesheet" type="text/css" href="css/structure.css"/>
                    <TITLE>TITRE</TITLE>
                </HEAD>
                <BODY>
                    <DIV id="menu"><xsl:apply-imports /></DIV>
                    <DIV id="content-zone">
                        <DIV id="content"><xsl:apply-templates/></DIV>
                    </DIV>
                    <FOOTER>
                        <DIV><xsl:text>FOOTER</xsl:text></DIV>
                    </FOOTER>
                </BODY>
            </HTML>
        </xsl:template>
     
    </xsl:stylesheet>
    menu.xsl
    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" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="html" />
        <xsl:template match="/">
            <xsl:for-each select="document('../menu.xml')">
                <xsl:apply-templates />
            </xsl:for-each>
        </xsl:template>
     
        <xsl:template match="/menu/item">
            <p>
                Test
            </p>
        </xsl:template>
    </xsl:stylesheet>
    avec xsl:copy-of il n'a pas l'air d'appliquer les règles donc je suis obligé d'utiliser xsl:for-each.

    Par contre, pour le <xsl:template match="/menu/item">, il va s'appliquer quelque soit le fichier xml utilisé .
    Suis-je obligé de créer un namespace dans mon fichier menu.xml ou est-il possible d'indiquer un namespace (ou un parent) dans lequel intégrer les éléments lors du for-each ?

    Sinon, pour le xsl:apply-imports, je trouve dommage de ne pas pouvoir indiquer quel fichier utiliser en priorité.
    Je pense qu'il faudrait passer une une règle "nommée" (?). Je vais essayer de rechercher un peu plus ce soir .

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je pense qu'il faudrait passer une une règle "nommée" (?). Je vais essayer de rechercher un peu plus ce soir .
    Si je comprend bien, on appelle cela un "mode".

    J'utilise donc : <xsl:apply-templates mode="menu" />.
    Pour appeler : <xsl:template match="/*" mode="menu">.

    Mais je ne sais pas si c'est la meilleure solution.
    Je vais regarder un peu du côté des "variables".


    EDIT : Les templates nommés sont pas mal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:call-template name="menu"/>
    <xsl:template name="menu">
    Par contre pour :
    Suis-je obligé de créer un namespace dans mon fichier menu.xml ou est-il possible d'indiquer un namespace (ou un parent) dans lequel intégrer les éléments lors du for-each ?
    Je suppose qu'on peut charger le document dans une variable puis faire une règle du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="$menu/element"/>
    Je continue donc à creuser

    EDIT :
    J'arrive à charger le tout dans une variable : <xsl:variable name="menu" select="document('../menu.xml')" />.
    Par contre pour créer la règle associée... <xsl:template match="$menu"> me donne l'erreur suivante :
    Erreur lors du chargement de la feuille de style : Échec de l'analyse d'une expression XPath.
    Je ne serais pas contre un petit coup de pouce à ce niveau là .

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Je ne vais finalement pas passer par une variable.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/11/2012, 13h47
  2. Réponses: 1
    Dernier message: 06/12/2011, 21h08
  3. [MySQL] COMMENT inserer dans mysql un texte PHRASE par phrase, en prennant en compte les .?!
    Par rezareza dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 30/01/2009, 13h49
  4. Réponses: 0
    Dernier message: 22/04/2008, 01h24
  5. fichier xml non pris en compte : redémarrage obligé ..
    Par coucou78 dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/04/2008, 10h28

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