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 :

[XPATH] comparaison ne passe pas


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut [XPATH] comparaison ne passe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="//A[Aid[@id=//Aa/Aaid[AidPar/codeType='Xp' or AidPar/codeType='Yp']/AidChi/@mid]/codeType='X' or codeType='Y']/uom"/>
    bonjour,
    soi mon expression xpth ci dessus
    le probleme vient déja de la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    codeType='X' or codeType='Y'
    en effet, si la valeur est effectivement 'X' alors le template match mais pas si c est Y...

    evidemment si je change X pour Y dans mon template ça remarche mais bon ça ne regle pas mon probleme...
    une idée?

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

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

    ça ne fonctionnera que si codeType est aussi un fils de l'élément A.

    Mais tu ne devrais pas mettre des prédicats aussi compliqués dans un pattern (attribut match). D'abord parce que c'est plus difficile à débogger, et en plus c'est mauvais en termes de performances, le "pattern matching" étant assez coûteux en calculs.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    je viens de corriger l erreur...mais effectivement à debogguer c est l enfer...
    que me conseilles tu?
    matcher le champ et tester le parent et les relations de celui ci???

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Quelques conseils :

    D'une manière générale, il vaut mieux laisser les "match" les plus simples possibles, et déplacer la complexité dans les "select".

    Dans la mesure où c'est possible, utilise des for-each plutôt que des templates.

    Vois si l'utilisation judicieuse d'un ou plusieurs xsl:key ne peut pas alléger l'écriture de tes prédicats et améliorer les performances
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    je croyais que les for-each étaient tres demandeurs en ressources...??

    quant à l utilisation des key...je ne comprends toujours pas mais j espere progresser encore
    merci

  6. #6
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par tiscars
    je croyais que les for-each étaient tres demandeurs en ressources...??
    Moins que la combinaison apply-templates/template.

    Il faut bien voir que le apply-templates sélectionne une liste de noeuds, et il faut ensuite que le processeur XSLT définisse les templates qui peuvent s'appliquer à ces noeuds (en appliquant à chaque noeud de la liste l'attribut match de chaque template, ce qu'on appelle du "pattern matching"). Parmi les templates candidats, le processeur XSLT choisit celui qui va finalement s'exécuter selon la priorité de chaque template, calculée selon une règle précise (plus le pattern est spécifique, plus il est prioritaire sur les autres).

    A tout ce processus, il suffit de comparer le for-each qui se contente de faire une itération sur la liste de noeuds sélectionnée pour se rendre compte de ce qui est le plus gourmand en ressources...

    Citation Envoyé par tiscars
    quant à l utilisation des key...je ne comprends toujours pas mais j espere progresser encore
    Faut pas désespérer...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    ok mais justement là il y a un probleme car au niveau des templates j ai d une part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="//A[Aid[@id=//Aa/Aaid[AidPar/codeType='Xp' or AidPar/codeType='Yp']/AidChi/@mid]/codeType='X' or codeType='Y']/uom"/>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="//A"/>
    ...et bien s est le 2eme qui s execute à tous les coups...
    or je pensais que plus le template était spécifique (j entend par là le plus complexe au niveau prédicats) plus il était prioritaire

  8. #8
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    C'est le deuxième qui s'exécute systématiquement parce que le prédicat du premier, à cause sans doute d'une erreur de logique, renvoie systématiquement false. C'est bien pour cela que je te conseille d'éviter les templates avec des prédicats complexes avec dans leur attribut match, parce que les erreurs ne sont pas faciles à mettre en évidence.

    D'autre part, un match="//A" est totalement inutile, utilise un match="A".
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  9. #9
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    merci

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

Discussions similaires

  1. ADO et access, ça passe pas.
    Par maximdus dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/09/2005, 22h38
  2. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12
  3. Envoi de mail [Hotmail : OK ; Wanadoo : Passe pas]
    Par NeoMan dans le forum Réseau
    Réponses: 14
    Dernier message: 28/07/2005, 10h52
  4. Sujet du mailto quine passe pas...
    Par Gourouni dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 15h57
  5. une comparaison qui marche pas.
    Par gandf dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/02/2004, 15h59

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