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] Croiser les données de 2 fichiers xml à l'aide d'une variable


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 12
    Points
    12
    Par défaut [XSLT] Croiser les données de 2 fichiers xml à l'aide d'une variable
    Bonjour,
    j'ai un fichier preferences.xml (parsé côté client par la feuille de style preferences.xsl), dans celui-ci j'ai entre-autres, un noeud "menu[@name='User']" où figurent une liste de nom de sites choisis par l'utilisateur:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="preferences.xsl" type="text/xsl"?>
    <preferences>
    	<menu name="User">
    		<item>Deezer</item>
    		<item>LastFM</item>
    		<item>Seeqpod</item>
    	</menu>
    	<menu name="Autres">
    		<item>ex1</item>
    		<item>ex2</item>
    		<item>ex3</item>
    	</menu>
    </preferences>
    Tous les choix possibles sont stockés dans un fichier annexe Sites.xml:
    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" encoding="UTF-8"?>
    <list>
    	<site>Deezer</site>
    	<site>Imeen</site>
    	<site>LastFM</site>
    	<site>MOG</site>
    	<site>Music IP</site>
    	<site>Pandora</site>
    	<site>Radioblogclub</site>
    	<site>Seeqpod</site>
    	<site>SocialFM</site>
    </list>
    La sélection se fait par l'intermediaire de case à cocher: (prerences.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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?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" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
    <xsl:template match="/">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Sites</title>
    </head>
     
    <body>
    <xsl:for-each select="document('Sites.xml')/list/site">
    	<xsl:element name="input">
    		<xsl:attribute name="type">checkbox</xsl:attribute>
    		<xsl:call-template name="checksite" />
    	</xsl:element>
    	<xsl:value-of select="." />
    	<xsl:element name="br" />
    </xsl:for-each>
    </body>
    </html>
     
    </xsl:template>
    <xsl:template name="checksite">
    	<xsl:variable name="site" select="." />
    	<xsl:variable name="checking" select="false" />
    	<xsl:for-each select="//preferences/menu[@name='User']/item">
    		<xsl:if test=".=$site">
    			<xsl:variable name="checking" select="true" />
    		</xsl:if>
    	</xsl:for-each>
    	<xsl:choose>
    		<xsl:when test="$checking='true'">
    			<xsl:attribute name="checked">checked</xsl:attribute>
    			<xsl:attribute name="title">Available - click to set Unavailable</xsl:attribute>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:attribute name="title">Unavailable - click to set Available</xsl:attribute>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    </xsl:stylesheet>
    le template 'checksite' sert à déterminer les choix par défaut à afficher en pré-cochant la case... aucune case ne sort cochée... savez-vous pourquoi?

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 12
    Points
    12
    Par défaut J'ai trouvé une solution qui marche sous Safari mais pas sous FF
    Dans le template "checksite" il fallait faire le test if "au sein" du noeud variable, puisqu'il détermine la valeur de la variable, sinon il y a deux déclaration pour la même variable ce que le processeur ne peut accepter.
    Ensuite, pour pouvoir "revenir" au document courant (preferences.xml) à qui est appliqué la feuille de style, dans le for-each il faut commencer le chemin par document('') qui désigne la racine du document en cours:

    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
    <xsl:template name="checksite">
    	<xsl:variable name="site" select="." />
    	<xsl:variable name="checking">
    		<xsl:for-each select="document('')/preferences/menu[@name='User']/item">
    			<xsl:if test="contains(@name,$site)">
    				<xsl:value-of select="'true'" />
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:variable>
    	<xsl:choose>
    		<xsl:when test="$checking='true'">
    			<xsl:attribute name="checked">checked</xsl:attribute>
    			<xsl:attribute name="title">Available - click to set Unavailable</xsl:attribute>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:attribute name="title">Unavailable - click to set Available</xsl:attribute>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    note: j'ai changé le preferences.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <item>NomSite</item>
    en:
    <item name="NomSite" />
    Mais c'est un détail.

    Pourquoi ça ne marche pas sous Firefox (aucune case cochée)?
    Quelqu'un a-t-il la solution?
    Merci

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 12
    Points
    12
    Par défaut fichiers
    Voici les fichiers en pièces-jointes:
    inclus 2 screenshot (Safari & Firefox)
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [AJAX] N'importe qui peut voir les données de mon fichier XML
    Par KoosMos dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/11/2007, 11h48
  2. [XSLT] comment afficher toutes les données d'un fichier xml ?
    Par bwwilly dans le forum XSL/XSLT/XPATH
    Réponses: 19
    Dernier message: 27/06/2007, 16h21
  3. [XSLT] Inclure les données d'un fichier XML dans un fichier
    Par SimOOn dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/04/2007, 16h26
  4. [DOM XML] Transfomer en variables les données d'un fichier xml
    Par rozdiwel dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 02/10/2006, 18h46
  5. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39

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