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 :

Expression OU avec XPATH


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 83
    Points
    83
    Par défaut Expression OU avec XPATH
    Bonjour


    je veux bien exprimer une condition OU entre deux expressions XPATH autrement dit fournir au moteur XPATH deux chemins il retourne que celui qui existe,je ne sais pas comment le faire ni même si c'est possible.


    Ps : voila ce que je veux faire sur un exemple concrêt

    Fichier XML
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="xml-xpath.xslt"?>
    <employes>
    	<employe num="1">
    		<nom>Dupont</nom>
    		<prenom>Robert</prenom>
    		<sexe>M</sexe>
    		<service>ressources humaines</service>
    		<tel>0645</tel>
                              <telfixe>0641115</telfixe>
    		<!--poste interne-->
    		<date_arrivée>03-04-2004</date_arrivée>
    		<!--arrivée dans la société-->
    	</employe>
     
    	<employe num="2">
    		<nom>Dupond</nom>
    		<prenom>Maurice</prenom>
    		<sexe>M</sexe>
    		<service>Ingénierie</service>
    		<telfixe>0641115</telfixe>
    		<date_arrivée>02-07-2004</date_arrivée>
    	</employe>
     
                <employe num="default">
    		<nom>Dupont</nom>
    		<prenom>Robert</prenom>
    		<sexe>M</sexe>
    		<service>ressources humaines</service>
    		<tel>0645</tel>
                              <telfixe>0641115</telfixe>
    		<!--poste interne-->
    		<date_arrivée>03-04-2004</date_arrivée>
    		<!--arrivée dans la société-->
    	</employe>
    </employes>
    je veux avoir //employe[@num='1'] (OU [@num='default'] s'il n existe pas)/tel(OU /telfixe si tel n'existe pas)

    Merci bien pour vautre aide

  2. #2
    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
    En XPath 1.0 (car, apparemment, vous utilisez le moteur XSLT 1.0 d'un navigateur), les fonctions de manipulation de chaines apportent souvent une solution honorable bien que peu intuitive...

    Ici, la difficulté ne se trouve pas dans le OU mais dans le SINON !

    Je proposerai donc quelque chose comme ceci pourvu que le caractère espace n'apparaisse pas dans un numéro de téléphone :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substring-before(concat(normalize-space(concat(//employe[@num='1']/tel,' ',//employe[@num='1']/telfixe,' ',//employe[@num='default']/tel,' ',//employe[@num='default']/telfixe)),' '),' ')

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il suffit d'utiliser l'opérateur d'union (le pipe |) et de rédiger des prédicats s'excluant mutuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (//employe[@num='1']|//employe[@num='default' and not(//employe[@num='1'])])/tel|(//employe[@num='1']|//employe[@num='default' and not(//employe[@num='1'])])/telfixe[not(../tel)]
    L'expression peut paraître dans son ensemble assez complexe, en fait si on l'examine morceau par morceau il n'y a rien de compliqué.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 83
    Points
    83
    Par défaut
    Merci c'est testé et elle marche parfaitement

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 83
    Points
    83
    Par défaut
    Je voulais juste signaler que cette expression n'est pas supportée par TinyXML/TinyXPATH je ne sais pas pourquoi!!!!!

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

Discussions similaires

  1. [VC++ 2005 Express] PB avec les API (SDK)
    Par dorian833 dans le forum MFC
    Réponses: 16
    Dernier message: 25/11/2005, 23h30
  2. Expression réguliére avec CHECK
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/09/2005, 17h38
  3. Expression régulière avec "|"
    Par YanK dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/07/2005, 15h09
  4. [XSL-fo] Probleme avec XPATH
    Par serwol dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/06/2005, 09h11
  5. [langage] Ptit Probleme expression réguliere avec perl
    Par Shoot Again dans le forum Langage
    Réponses: 3
    Dernier message: 02/12/2004, 12h44

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