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 18/06/2007, 15h45   #1
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
Par défaut [DOM] Recherche dans un fichier XML via XPath

Bonjour,

J'ai un fichier XML pour un sitemap de la structure suivante :

Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
  <url>
    <loc>http://localhost/index.php</loc>
  </url>
<url>
    <loc>http://localhost/contact.php</loc>
  </url>
<url>
    <loc>http://localhost/presentation.php</loc>
  </url>
<url>
    <loc>etc...</loc>
  </url>
</urlset>

J'aimerais simplement rechercher si une URL est présente dans mon fichier XML ou non.

Exemple:

Je veux tester si "http://localhost/index.php" est bien dans mon fichier.

alors :

Code :
1
2
3
4
5
6
7
...
 
$xp = new DOMXpath($dom);
 
$expr_recherche = "Que dois je mettre ici ?";
 
$result= $xp->query($expr_recherche);
Je sais ensuite comment traiter les données, je n'arrive simplement pas à passer une expression de recherche pour trouver "http://localhost/index.php" dans le fichier xml!

J'ai cherché, je ne trouve pas! si vous pouviez m'indiquer l'expression ce serait sympa!

Merci beaucoup.
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h00   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Bon, j'ai vainement essayé de charger un xml en php pour tester l'expression, mais je n'ai pas trop le temps donc je te la donne (sans grande conviction)
Code :
$query = '//[url="http://localhost/index.php"]';
Dans tous les cas, sur le W3schools tu as pas mal d'exemples : http://www.w3schools.com/xpath/xpath_syntax.asp
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h25   #3
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
C'est bien gentil, mais malheureusement ça ne fonctionne pas!

J'ai été voir sur le site j'ai trouvé ça :

Code :
"/urlset/url[loc='http://localhost/test.php']/loc"
Mais ça ne fonctionne pas non plus!

Ou alors je n'affiche pas comme il faut les données ensuite, car je n'ai pas de message d'erreur.

Code :
1
2
3
4
5
foreach($result as $key => $val){
 
echo $key . '-' . $val;
 
}
Mais j'ai une page blanche, aucun résultat...
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h27   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Pourrais tu donner le code qui permet de charger ton xml, que je puisse tester chez moi directement?
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h31   #5
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
En fait j'ai fait une classe SiteMap extends domDocument.

Ca revient au meme de faire:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$dom = new DOMDocument();
$dom->load('sitemap.xml');
$dom->formatOutput=true;
 
$xp = new DOMXpath($dom);
 
$result=$xp->query("/urlset/url[loc='http://localhost/test.php']/loc");
 
foreach($result as $key => $val){
 
echo $key . '-' . $val;
 
}
Le but de la manip, c'est de déterminer si une URL passer dans "$xp->query" est présente ou non dans le fichier.

Si elle n'est pas présente, on ajoute un noeud. Donc c'est pour ça que j'ai besoin de faire cette recherche...
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h36   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Je suis désolé, je n'arrive pas du tout a charger un xml dans un DOMDocument, il me parle de paramètre long dans la classe ce qui n'a rien a voir avec le prototype donné dans la doc.

Par contre je me suis trompé dans l'xpath tout a l'heure ca serait plutot ca :
Code :
$query = '//[loc="http://localhost/index.php"]';
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h43   #7
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
Ca ne marche pas non plus. Ce n'est pas grave je vais continuer de chercher

En tout cas merci !
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h58.


 
 
 
 
Partenaires

Hébergement Web