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

Bibliothèques et frameworks PHP Discussion :

[DOM] Recherche de mots dans un attribut


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut [DOM] Recherche de mots dans un attribut
    Bonjour,

    J'ai chercher un peu partout pour savoir comment faire pour que, si j'ai un tableau (array) remplis de mots comment faire pour savoir dans quelles attributs figurent au moins un des mots ..

    Pour faire un formulaire de recherche en gros ..

    Merci.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vous n'auriez pas plus de précisions voir un exemple (document XML + tableau) à fournir ? Les attributs sont connus à l'avance ou non ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Bonijour,

    J'ai un xml du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <root>
      <noeud texte="du texte" />
    </roor>
    Et l'utilisateur qui veux faire une recherche, tappe ses mots et je les mets dans un array. Donc j'ai un array avec les mots que l'on recherche. Et j'aimerais que si l'un des mot apparait dans l'attribut "texte", que l'on prenne le noeud pour l'afficher ..

    J'ai pensé à preg_match, mais il y a peut-être plus court avec Xpath ?

    Merci.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Citation Envoyé par Klimium
    J'ai pensé à preg_match, mais il y a peut-être plus court avec Xpath ?
    C'est possible mais les expressions régulières traitent du texte, elles ne tiennent pas réellement compte du format du document ni de sa syntaxe (validation entre autres).

    Avec DOM et XPath, on peut faire comme ça :
    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
    <?php
    $mots = array('deux', 'quatre');
     
    if (count($mots) >= 1) {
        $dom = new DomDocument;
        $dom->preserveWhiteSpace = FALSE;
        $dom->formatOutput = TRUE;
        $dom->load('dom_search.xml');
     
        $xpath = new DomXPath($dom);
        $exp = "//*[@texte='" . implode("' or @texte='", $mots) . "']";
        foreach ($xpath->query($exp) as $n) {
            printf('%s : %s<br />' . PHP_EOL, $n->nodeName, $n->nodeValue);
        }
    }
    ?>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Il ne me donne pas d'erreur, mais celà ne me trouve aucun article ..

    Voici la requete que j'ai mise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "//articles/article[@description='" . implode("' or @description='", $mots) . "']";
    $articles = $xpath->query($query);
    Et voici le XML exact :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="iso-8859-1"?>
    <articles>
      <article id="***" titre="***" auteur="***" date="1182252721" url="***" img="***" site="***" tags="***" description="***" statut="***"/>
    </articles>

    Avez vous la solution ?

    Merci.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    J'ai fait l'essai mais je n'ai rencontré aucun problème. Auriez-vous des caractères accentués ? Si oui, il faut que les éléments de votre tableau soit encodés en UTF8 ou la requête XPath puisque l'extension (basée sur libxml2) utilise en interne de l'UTF-8 (fonction utf8_encode).

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

Discussions similaires

  1. Rechercher un mot dans un texte
    Par BernardT dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/12/2005, 08h55
  2. [Regex]Recherche de mots dans une chaîne
    Par lionel69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/11/2005, 18h20
  3. rechercher un mot dans un titre
    Par MANU_2 dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/11/2005, 12h02
  4. Recherche de mot dans un CRichEdit
    Par jawad91 dans le forum MFC
    Réponses: 1
    Dernier message: 28/04/2005, 15h36
  5. [TP]Recherche de mots dans un Doc.
    Par Loceka dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 04/10/2004, 19h04

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