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 :

equals et contains fonctionnent-ils de la même manière? [XPATH 2.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut equals et contains fonctionnent-ils de la même manière?
    J'ai un document XML qui ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <c>
      <a id='1'>xx</a>
      <a id='2'>yy</a>
      <b id='3'>yy</b> 
    </c>
    //c[a = b] sélectionne le nœud c. En effet, le toString des nœuds '2' et '3' sont égaux (à yy). Par contre, //c[contains(a, b)] ne le sélectionne pas. Pourtant 'yy' est contenu dans 'yy'.

    Si maintenant je réduis mon document à:
    //c[a = b] ne sélectionne plus le nœud c. Désormais, //c[contains(a, b)] le sélectionne.


    Je ne trouve pas ni dans la Spécification de XPath ni dans la doc de Saxon, la raison de cette différence entre = et contains.

    Merci de votre aide.

    PS. j'utilise XPath 2.0 avec le 'backward compatibilty mode'

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par LGnord Voir le message
    Je ne trouve pas ni dans la Spécification de XPath ni dans la doc de Saxon, la raison de cette différence entre = et contains.
    http://www.w3.org/TR/xpath/#booleans :

    Citation Envoyé par XPath 1.0
    An EqualityExpr [...] or a RelationalExpr [...] is evaluated by comparing the objects that result from evaluating the two operands. Comparison of the resulting objects is defined in the following three paragraphs. First, comparisons that involve node-sets are defined in terms of comparisons that do not involve node-sets; this is defined uniformly for =, !=, <=, <, >= and >. [...]

    If both objects to be compared are node-sets, then the comparison will be true if and only if there is a node in the first node-set and a node in the second node-set such that the result of performing the comparison on the string-values of the two nodes is true.

    Alors que :

    http://www.w3.org/TR/xpath/#section-String-Functions

    Citation Envoyé par XPath 1.0
    Function: boolean contains(string, string)
    http://www.w3.org/TR/xpath/#section-Function-Calls

    Citation Envoyé par XPath 1.0
    An argument is converted to type string as if by calling the string function.
    http://www.w3.org/TR/xpath/#section-String-Functions

    Citation Envoyé par XPath 1.0
    Function: string string(object?)

    The string function converts an object to a string as follows:

    - A node-set is converted to a string by returning the string-value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned.

    Nous pouvons donc en déduire :

    - Qu'en utilisant un opérateur, les deux node-sets sont comparés en comparant leurs contenus deux à deux. La comparaison globale est évaluée vraie si au moins une de ces comparaisons est vraie.

    - Qu'en utilisant une fonction, chaque node-set se réduit au premier node qu'il contient, le convertit en string, et la fonction s'applique sur les deux strings obtenues.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Merci, tes citations m'ont aidées à généraliser mon cas particulier aux opérateurs/fonctions.

    Par contre, je ne comprends pas la logique de ce choix.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je ne sais pas, mais j'imagine que :

    - Ce fonctionnement pour l'opérateur = est très bon. Ça simplifie beaucoup l'écriture de conditions XPath.

    - Quelqu'un a dû penser que ce serait aussi utile pour les autres opérateurs relationnels, ou du moins que ce ne serait pas gênant si les autres opérateurs relationnels marchent comme ça aussi. Et donc ils fonctionnent pareil par cohérence avec =
    Personnellement j'aurais plusieurs choses pas très flatteuses à dire aux génies qui ont décidé ça pour !=

    - Les appels de fonctions ont ce mécanisme par cohérence avec les autres fonctions qui prennent aussi des string en paramètres, mais ne sont pas des opérateurs relationnels (ne prennent pas 2 opérandes ou renvoient autre chose qu'un booléen.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/01/2012, 18h23
  2. Décalage d'une image et d'un titre alors qu'ils ont la même marge
    Par etiennegaloup dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/11/2011, 14h25
  3. Deux plugins peuvent-ils avoir le même raccourci ?
    Par el_jefe dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 18/02/2011, 01h42
  4. [OpenTBS] Comment fonctionnent-ils ?
    Par pierrera dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 04/11/2005, 08h58
  5. Journaux d'archivage: comment fonctionnent-ils?
    Par nmathon dans le forum Oracle
    Réponses: 4
    Dernier message: 28/09/2005, 21h24

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