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] génération d'un xpath pour faire des recherches dans un xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [XPATH] génération d'un xpath pour faire des recherches dans un xml
    Bonjour,

    Après quelques recherches je seche un peu sur ce problème et me demande si c'est réalisable.

    Je cherche à réaliser une recherche dans un fichier xml à partir de champs remplis dans une formulaire web. Dans ce formulaire chacun des attributs des éléments de mon fichier xml est représenté par un champ.

    Le fichier xml ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <TREE>
    <CONTACT NOM='Smith' PRENOM='Bob AGE='18'/>
    <CONTACT NOM='Little' PRENOM='Stuart' AGE='17'/>
    <CONTACT NOM='Litto' PRENOM='Stan' AGE='22'/>
    ...
    </TREE>
    Il y'a donc un champ NOM, PRENOM et AGE qui peuvent tous être remplis ou non par l'utilisateur. Si aucun champ n'est remplis tous les contacts doivent être retournés, Si 'Smith' est rentré dans le champ NOM tous les contact s'appelant smith doivent être retourné.

    Seul soucis, si un champ est rempli à moitié tous les eléments dont l'attribut respectif contient cette partie de mot doit être retourné. Par exemple, Si le champ NOM est rempli par 'it' et le champ PRENOM par 'St', les 2 derniers contacts doivent être retournés car ils contiennent 'it' et 'St' tous les 2.

    J'avais déjà un xsl qui triait cet xml et formait une sortie adéquate mais avec tous les éléments sans exception. Donc je l'ai gardé et j'ai juste cherché à trouver le bon xpath pour faire le tri. Et j'avoue que c'est plus dur que je pensais. J'arrive à former l'xpath pour récuperer les éléments lorsque les attributs sont remplis completement mais pas moyen d'arriver à inserer des wildcards qui permettraient de recuperer les éléments correspondants lorsque les champs sont remplis à moitié.

    N'y a t'il pas un moyen de faire comme dans une requete sql avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    where NOM LIKE '%it%'
    J'ai cru trouver une solution avec la fonction matches(), mais je ne vois pas comment la mettre en oeuvre dans ce cas là.

    Merci d'avance si vous trouvez une solution.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    deux fonctions xpath se rapprochant de ton like

    http://www.w3.org/TR/xpath#function-starts-with et contains

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Etant donné que le dev était un peu pressé, j'ai basculé le tout en faisant la recherche coté SQL comme j'avais dit pour éviter de sêcher trop longtemps, mais maintenant que j'ai bouclé le truc je vais me repencher sur la version xpath.

    Donc j'avais déjà vu ces fonctions, mais le retour true/false m'avait fait pensé qu'elles ne seraient utiles qu'a l'intérieur d'un xsl, mais après réflexion, on peut p'tet les utiliser directement dans le selectNodes (c'est en c# le code derrière pour info) avec un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode XmlSelected = xmlContacts.SelectNodes("/TREE/CONTACT[contains(@NOM,\"" + val1 + "\") and contains(@PRENOM,\"" + val2 + "\") and contains(@AGE,\"" + val3 + "\")]");
    où val1, val2 et val3 sont les valeurs des champs récuperés dans la page.

    Enfin je vais tenter de tester ça, et je reviens pour vous dire ce que ça a donné.

    A moins que je me foire completement du coté utilisation de ces fonctions...


    EDIT après vérification:

    Ca marche bel et bien de cette manière, donc merci du coup de main pour m'avoir ré-aiguillé vers ces fonctions !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2011, 14h30
  2. Faire des recherches dans plusieur Feuilles
    Par edpth dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/11/2009, 01h21
  3. Réponses: 1
    Dernier message: 21/10/2009, 18h26
  4. Réponses: 1
    Dernier message: 17/10/2007, 11h55
  5. Que faut il utiliser pour faire des recherches dans LDAP?
    Par kabouns dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 04/08/2006, 16h24

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