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 option text()


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut XPATH option text()
    Bonjour,
    j'ai un petit souci de compréhension sur une requête XPath.
    J'ai réussi à contourner le problème mais ma curiosité a été éveillé par ce point bloquant.
    ma XSD se compose comme suit :
    <xsd:element name="imsi" type="S3G:SimLogique_imsi"/>
    avec :
    <xsd:simpleType name="SimLogique_imsi">
    <xsd:restriction base="xsd:string">
    <xsd:maxLength value="15"/>
    </xsd:restriction>
    </xsd:simpleType>
    et ma requête XPath est la suivante :
    [./l:msisdn/text()='123456'] => fonctionne sans problème
    [./l:imsi/text()='456789'] => ne fonctionne pas
    ma solution de contournement est la suivante :
    [./l:imsi='456789'] => fonctionne

    Mais je ne comprends pas pourquoi la première syntaxe qui est celle que j'utilise dans tout mon fichier XPATH refuse de fonctionner dans ce cas.
    Pour Info, les deux types de imsi et msisdn sont déclarés exactement de la même façon.

    Quelqu'un aurait-il une idée de la provenance de ce point.

    Merci par avance

  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
    Le plus simple serait d'observer le fichier XML qui a exposé ça. Tu aurais ta réponse tout de suite.
    Mais bon :

    Il y a peut-être une processing-instruction dans l'élément <imsi>.

    Exemple 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <imsi>456<?separate?>789<imsi>
    Ou alors, peut-être que le fichier XML n'est pas valide vis-à-vis de ce schéma et qu'il n'y a pas que du texte dans <imsi>.

    Exemple 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <imsi>456<space/>789<imsi>
    Ou exemple 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <imsi><kikoo>456789</kikoo><imsi>

    parlons de la différence entre
    et
    - Le premier sélectionne les nœuds textes enfants de <imsi>.
    - Le second sélectionne <imsi> lui-même.

    Après, reste à voir comment les deux cas sont comparés à '456789'

    - Dans le premier cas, on ne garde que le premier nœud texte, on jette les autres, et on vérifie si son contenu est exactement '456789'.
    Dans mes exemples 1 et 2, cela revient à comparer '456' à '456789'. Pas égal => prédicat faux.
    Dans mon exemple 3, <imsi> n'a pas d'enfant texte. Ce qui est sélectionné est l'ensemble vide. L'ensemble vide n'est jamais égal à rien => prédicat faux.

    - Dans le second cas, on transforme <imsi> en texte. Pour cela, on prend, dans l'ordre, tous ses nœuds textes descendants, et on les concatène les uns aux autres. Cela fait, on compare le résultat à '456789'
    Dans mes exemples 1 et 2, cela revient à prendre '456' d'une part, puis '789' d'autre part, les concaténer ce qui donne '456789', et comparer à '456789'. C'est pareil => prédicat vérifié.
    Dans mon exemple 3, il n'y a qu'un seul nœud descendant de <imsi>, c'est '456789'. Il est égal à '456789' => prédicat vérifié.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut
    Merci de ta réponse.
    Pour la compléter :
    - il n'y a pas de processing instruction.
    - le fichier XML est validé juste avant cette étape
    Pour éclairer un peu la situatiuon, voici l'extriat de mon fichier XML :
    <msisdn>123456</msisdn>
    <A>
    <Sim>
    <imsi>456789</imsi>
    <B>
    ....
    mon analyse est des plus simple, et en l'occurrence, il n'y a qu'une chaine dans imsi, donc les deux écritures devraient ici avoir le même comportement non?

  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
    Citation Envoyé par djtoph Voir le message
    mon analyse est des plus simple, et en l'occurrence, il n'y a qu'une chaine dans imsi, donc les deux écritures devraient ici avoir le même comportement non?
    Si, en effet. C'est d'ailleurs le cas avec deux technos Java que j'ai testées.

    Autres possibilités :
    - il y a un autre élément <imsi> avant celui que tu vises, qui est aussi sélectionné par le XPath en question, et est donc celui qui sera testé ; et qui, lui, contient les choses en plus dont j'ai parlé.
    - Tu ne fais pas vraiment ce que tu nous dis ici que tu fais.
    - celle à envisager en dernier : il y a un bug (assez aléatoire, apparemment,) dans la bibliothèque XPath ou XML que tu utilises.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut
    Pour répondre à tes hypothèses :
    - ce n'est pas possible, car mon msisdn égal à 123456 n'est présent qu'une seule fois dans mon document et sans la balise imsi, ma requête XPath est validée.
    - j'ai pas vraiment compris ta seconde hypothèse, mais je fais bien ce que je dis que je fais :-)
    (le reste de mon document [qques centaines de lignes] est bien validé SAUF cette balise oO )
    - C'était ma conclusion, mais n'étant pas expert, j'aurais espéré une réelle solution corrigeable.

    En tout cas merci beaucoup pour tes réponses (claires et vulgarisées).

    A bientôt.

  6. #6
    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 djtoph Voir le message
    (le reste de mon document [qques centaines de lignes] est bien validé SAUF cette balise oO )
    Une minute, quel est le rapport entre la validation et une requête XPath ?
    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. [XSLT] combiner XPATH et texte
    Par jeanjotibo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 06/02/2008, 19h31
  2. [XPath] WordML Recherche du texte
    Par fouhaa dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/10/2006, 12h09
  3. Réponses: 4
    Dernier message: 30/03/2006, 03h29
  4. récupération texte entre <option> et </option>
    Par Trunks dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/09/2005, 14h19
  5. [Etat]afficher texte des groupes d'options
    Par 419 dans le forum IHM
    Réponses: 2
    Dernier message: 12/09/2005, 15h30

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