Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2007, 12h57   #1
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
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.
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2007, 13h40   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous n'auriez pas plus de précisions voir un exemple (document XML + tableau) à fournir ? Les attributs sont connus à l'avance ou non ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 09h39   #3
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Bonijour,

J'ai un xml du genre :
Code :
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.
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 11h48   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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);
    }
}
?>
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 12h25   #5
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Il ne me donne pas d'erreur, mais celà ne me trouve aucun article ..

Voici la requete que j'ai mise :
Code :
1
2
$query = "//articles/article[@description='" . implode("' or @description='", $mots) . "']";
$articles = $xpath->query($query);
Et voici le XML exact :
Code XML :
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.
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 13h22   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 13h46   #7
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Comme chaque fois dns la requete ça met "@description=XX" si la description ne vaut pas XX ca va pas le rechercher .. ?
Je ne veux pas que la description soit égale à un des mots mais que le mot soit compris dedans ..
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h05   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Pour rester avec XPath :
Code :
$exp = "/articles/article[contains(@description, '" . implode("') or contains(@description, '", $mots) . "')]";
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h34   #9
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Parfais, merci
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h21.


 
 
 
 
Partenaires

Hébergement Web