Faire une recherche inversée en XML

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Faire une recherche inversée en XML

Re: Faire une recherche inversée en XML

par fluxx » 19 févr. 2010, 10:49

Effectivement, ça marche, un grand merci à toi stealth35 !

J'avoue que j'avais envisagé pas mal de combinaisons, mais pas celle là... J'ai pas encore bien intégré la logique, mais j'imagine que ça rentrera avec le temps, comme le reste ^^
En fait, ce qu'il m'affichait à chaque fois, c'était le nom du premier département de chaque région. Et quand je changeais item(0) en item(1), c'était le 2ème etc. Bref je tâtonne, mais c'est comme ça qu'on apprend, à défaut de trouver des tutos complets.

Merci beaucoup en tous cas pour ton aide précieuse.

Re: Faire une recherche inversée en XML

par stealth35 » 19 févr. 2010, 04:24

un
$dpt = $search->textContent;
devrai faire l'affaire

Re: Faire une recherche inversée en XML

par fluxx » 19 févr. 2010, 04:01

Bon, ben désolé, du coup, je suis de retour...
J'ai pas mal changé la présentation de mon fichier XML pour l'optimiser. J'ai a peu près réussi à adapter les tuyaux que tu m'as donné, mais c'est pas tout à fait ça. Voici le XML relooké :
<?xml version="1.0" encoding="ISO-8859-1"?>
<france>
<region>
	<nom_region id="1">Ile-de-France</nom_region>
	<nom_dpt id="75">Paris</nom_dpt>
	<nom_dpt id="77">Seine-et-Marne</nom_dpt>
	<nom_dpt id="78">Yvelines</nom_dpt>
	<nom_dpt id="91">Essonne</nom_dpt>
	<nom_dpt id="92">Hauts-de-Seine</nom_dpt>
	<nom_dpt id="93">Seine-Saint-Denis</nom_dpt>
	<nom_dpt id="94">Val-de-Marne</nom_dpt>
	<nom_dpt id="95">Val-d'Oise</nom_dpt>
</region>
<region>
	<nom_region id="2">Champagne-Ardenne</nom_region>
	<nom_dpt id="08">Ardennes</nom_dpt>
	<nom_dpt id="10">Aube</nom_dpt>
	<nom_dpt id="51">Marne</nom_dpt>
	<nom_dpt id="52">Haute-Marne</nom_dpt>
</region>
<region>
	<nom_region id="3">Picardie</nom_region>
	<nom_dpt id="02">Aisne</nom_dpt>
	<nom_dpt id="60">Oise</nom_dpt>
	<nom_dpt id="80">Somme</nom_dpt>
</region>
</france>
Et mon problème, c'est maintenant d'afficher le nom du département à partir de son id.
Voici mon script :
$search = $xpath->query("//nom_dpt[@id=77]")->item(0);
$dpt = $search->parentNode->getElementsByTagName('nom_dpt')->item(0)->textContent;
echo $dpt;
Tel que présenté ci-dessus, je voudrais que le script m'affiche le département 77, à savoir la Seine et Marne... Or, le script me retourne Paris...
Comment puis-je corriger cela ?

Merci par avance pour votre aide

Re: Faire une recherche inversée en XML

par fluxx » 18 févr. 2010, 20:44

Merci beaucoup, ça marche nickel !

Re: Faire une recherche inversée en XML

par stealth35 » 18 févr. 2010, 17:27

tu peu rechercher du contenu avec xpath avec la fonction "contains"
	$dom = new DomDocument();
	$dom->load('test.xml');
	
	$xpath 	= new DOMXPath($dom);
	$search = $xpath->query("//code_dpt[contains(.,'75')]")->item(0);
	
	$region = $search->parentNode->parentNode->getElementsByTagName('nom_region')->item(0)->textContent;
	$ville 	= $search->parentNode->getElementsByTagName('nom_dpt')->item(0)->textContent;

	echo $region . ' ' . $ville;
	//Île-de-France Paris
attention a ton XML il a besoin d'un root

Re: Faire une recherche inversée en XML

par fluxx » 18 févr. 2010, 17:20

Bonjour,

Merci pour ta réponse rapide. Je viens donc de faire une recherche sur Xpath, et je suis tombé sur ce tuto : http://www.journaldunet.com/developpeur ... l-1d.shtml. Le problème est encore une fois qu'ici on cherche les balises, or, moi j'aimerais faire une recherche à partir du contenu d'une balise.

Merci en tous cas pour ton aide.

Re: Faire une recherche inversée en XML

par stealth35 » 18 févr. 2010, 17:04

Faire une recherche inversée en XML

par fluxx » 18 févr. 2010, 17:02

Bonjour à tous,

Je suis actuellement en train de coder un site, sur lequel je dois utiliser des données géographiques. Du coup, j'ai constitué un fichier XML, avec le nom des régions et leurs départements :
<?xml version="1.0" encoding="UTF-8"?>
<region>
<nom_region>Île-de-France</nom_region>
	<departement>
		<code_dpt>75</code_dpt>
		<nom_dpt>Paris</nom_dpt>
	</departement>
	<departement>
		<code_dpt>77</code_dpt>
		<nom_dpt>Seine-et-Marne</nom_dpt>
		</departement>
	<departement>
		<code_dpt>78</code_dpt>
		<nom_dpt>Yvelines</nom_dpt>
	</departement>
	<departement>
		<code_dpt>91</code_dpt>
		<nom_dpt>Essonne</nom_dpt>
	</departement>
	<departement>
		<code_dpt>92</code_dpt>
		<nom_dpt>Hauts-de-Seine</nom_dpt>
	</departement>
	<departement>
		<code_dpt>93</code_dpt>
		<nom_dpt>Seine-Saint-Denis</nom_dpt>
	</departement>
	<departement>
		<code_dpt>94</code_dpt>
		<nom_dpt>Val-de-Marne</nom_dpt>
	</departement>
	<departement>
		<code_dpt>95</code_dpt>
		<nom_dpt>Val-d'Oise</nom_dpt>
	</departement>
</region>
<region>
	<nom_region>Picardie</nom_region>
	<chef_lieu>
		<code_chef>80021</code_chef>
		<nom_chef>Amiens</nom_chef>
	</chef_lieu>
	<departement>
		<code_dpt>02</code_dpt>
		<nom_dpt>Aisne</nom_dpt>
	</departement>
	<departement>
		<code_dpt>60</code_dpt>
		<nom_dpt>Oise</nom_dpt>
	</departement>
	<departement>
		<code_dpt>80</code_dpt>
		<nom_dpt>Somme</nom_dpt>
	</departement>
</region>
<region>
<nom_dpt>Nord-Pas-de-Calais</nom_dpt>
	<chef_lieu>
		<code_chef>59350</code_chef>
		<nom_chef>Lille</nom_chef>
	</chef_lieu>
	<departement>
		<code_dpt>59</code_dpt>
		<nom_dpt>Nord</nom_dpt>
	</departement>
	<departement>
		<code_dpt>62</code_dpt>
		<nom_dpt>Pas-de-Calais</nom_dpt>
	</departement>
</region>
ETC...

Et je me demande, comment je peux parcourir ce fichier, de sorte que, je puisse retrouver à partir du code "59", contenu dans la balise <code_dpt>, le nom du département (Nord - <nom_dpt>) et la région (Nord Pas de Calais - <nom_region>).
J'imagine que cela se passe avec DOM, mais n'y connaissant rien, je voulais avoir votre avis... Je suis tombé sur ce tuto : http://eusebius.developpez.com/php5dom/#L3.2 , mais je ne vois pas du tout comment adapter l'exemple; il ne s'agit pas vraiment d'une recherche à partir de la valeur contenue entre 2 balises....


Merci par avance de m'aiguiller;