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

XML/XSL et SOAP Discussion :

problème avec la fonction contains()


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 18
    Points
    18
    Par défaut problème avec la fonction contains()
    Bonjour,

    Structure de mon xml:

    bibliotheque

    ->collection
    -->album
    ---->titre
    ---->serie
    ---->numero
    ---->auteur
    ------>prenom
    ------>nom
    ---->editeur
    -->album
    ->collection

    bibliotheque



    Un de mes auteurs a pour prénom "John" et je voudrais n'afficher que celui-là en fesant ceci via un xsl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (...)
    <h3>Contains or not?: Prénom "John" (avec choose/when)</h3>
    		<xsl:for-each select="bibliotheque/collection/album">
    			<ul>
    				<xsl:choose>
    					<xsl:when test="auteur/prenom[contains(.,'John')]">
    						<li style="color:red;"><xsl:value-of select="./titre"></xsl:value-of></li>
    					</xsl:when>
    					<xsl:otherwise></xsl:otherwise>
    				</xsl:choose>
    			</ul>
    		</xsl:for-each>
    (...)
    Je fais sans doute quelque chose de très faux...
    Merci,

    V.

  2. #2
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Hello,
    Faux, non je pense pas, juste sous-optimal.
    Tu peux remonter la condition en tant que prédicat de la sélection XPATH du "for-each". Et vaut mieux utiliser un template qu'un for-each en général (sauf si on joue avec la fonction "position").
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="html" indent="yes"/>
     
    	<xsl:template match="/">
    	<html><body>
    	<h3>Contains or not?: Prénom "John"</h3>
    		<xsl:apply-templates select="bibliotheque/collection/album[contains(auteur/prenom,'John')]"/>
    	</body></html>
    	</xsl:template>
     
    	<xsl:template match="album">
    		<h3>Prénom "<xsl:value-of select="auteur/prenom"/>"</h3>
    		<ul>
    			<li style="color:red;"><xsl:value-of select="titre"/></li>
    		</ul>	
    	</xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Est-ce vraiment de la fonction contains() dont vous avez besoin ?

    "Johnny", "Paul-John",... sont elles des valeurs à sélectionner ?

    -Alain
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup pour vos réponses,

    @Morbo,
    Merci ça marche très bien comme tu as montré.
    Si je comprends bien, je ne peux faire ça qu'en utilisant un <apply-template> et puis, une série de <template match=""> selon mes besoins.
    Mais mon doc XSL ne contient pas d'<apply-template>, seulement un <template match="/"> au début et puis des <for-each select=""> selon mes besoins. (C'est pour ça que j'essayais avec <xsl:for-each select="bibliotheque/collection/album"> etc... )

    Dès lors, n'y-at'il pas moyen de matcher "bibliotheque/collection/album[contains(auteur/prenom,'John')]" autrement au sein du XSL, sans utiliser <apply-templates>?

    @Alain
    Dans l'absolu, je n'avais pas pensé que contains"John" prendrait aussi "Johnny" etc,... Je n'ai aucune idée comment faire pour prendre exclusivement "John".
    Un indice? ;-)

    Merci,

    Amicalement,

    Vincent

  5. #5
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Hello,
    Sisi, tu peux très bien utiliser exactement le même XPATH dans un "for-each", je trouvais juste ça plus "propre" avec un "apply-templates"
    Pour pour l'égalité strict, ben on utilise
    Ce qui te donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="bibliotheque/collection/album[auteur/prenom='John']">
    blablabal
    </xsl:for-each>

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    OK bien sûr
    Merci beaucoup pour les explications!
    Elles me sont fort utiles!!!

    Thanks!

    V.

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

Discussions similaires

  1. Problème avec la fonction : CONTAINS
    Par kmdkaci dans le forum SQL
    Réponses: 6
    Dernier message: 01/06/2011, 14h49
  2. [XSLT] Problème avec la fonction contains
    Par yozart dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 24/11/2008, 14h57
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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