Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOMXML
DOMXML Forum d'entraide pour l'extension DOMXML permettant de manipuler des documents XML en PHP 4 (approche DOM). Avant de poster -> tutoriels DOMXML
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 11/11/2007, 14h42   #1
Invité régulier
 
Inscription : novembre 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 50
Points : 7
Points : 7
Par défaut [DOMXML] parser un fichier .php?id=X couplé à un xml

Bonjour tout le monde !
Je galere à trouver une solution à mon probleme et me tourne donc vers vous au cas où :-)

J'ai un fichier XML de ce type :

Code :
1
2
3
4
5
6
7
8
9
<element>
<id>1</id>
<name>nom 1</name>
</element>
 
<element>
<id>2</id>
<name>nom 2</name>
</element>
et je voudrais pouvoir parser un fichier PHP, couplé à mon xml, et qui serait de type : script.php?id=1

soit dans cet exemple :

Code :
1
2
3
4
<element>
<id>1</id>
<name>nom 1</name>
</element>
qui pourrait donc via GET la variable 1 récupérer uniquement les données xml liées à l'id 1 de mon fichier XML.

Je n'ai pas de probleme pour parser les données xml en html, mais plutot pour isoler les données selon l'id de mon choix.

Savez vous comment faire s'il vous plait ??? Ou y a t il une autre méthode ??

Merci d'avance, (mes cheveux aussi vous remercient

JF
infiniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 18h09   #2
Membre Expert
 
Avatar de alain.couthures
 
Inscription : avril 2007
Messages : 889
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2007
Messages : 889
Points : 1 061
Points : 1 061
Une simple requête XPath est suffisante pour extraire l'élément selon son id...

Il faut
  1. charger le document XML
  2. créer un navigateur XPath
  3. construire la requête XPath dynamiquement dans une chaîne de caractères
  4. lancer la requête
  5. récupérer le XML correspondant au noeud trouvé
La syntaxe de tout ça dépend de la version PHP !
__________________
Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/
alain.couthures est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 18h15   #3
Invité régulier
 
Inscription : novembre 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 50
Points : 7
Points : 7
Salut !

je suis effectivement tombé sur des pages mentionnant xpath pendant mes recherches mais ce n'était pas très clair...

Je suis en php 5.1.4, aurais tu par hasard des exemples de scripts permettant de réaliser ce que tu décris plus haut ?

Merci de ton explication et de ton aide!
infiniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 18h31   #4
Membre Expert
 
Avatar de alain.couthures
 
Inscription : avril 2007
Messages : 889
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2007
Messages : 889
Points : 1 061
Points : 1 061
Quelque chose comme ça ... :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$xDoc = new DOMDocument();
$xDoc->load($filename);
$xPath = new DOMXPath($xDoc);
$xQuery = $xPath->query("/elements/element[id=\"".$id."\"]");
if($xQuery->length != 0 ) {
   $xRes = new DOMDocument();
   $xRes->loadXML("<dummy/>");
   $xRes->documentElement->parentNode->replaceChild($xRes->importNode($xQuery->item(0), true), $xRes->documentElement);
   echo $xRes->saveXML();
} else {
   echo "Non trouvé...";
}
(non testé!)
__________________
Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/
alain.couthures est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 19h27   #5
Invité régulier
 
Inscription : novembre 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 50
Points : 7
Points : 7
re! merci pour le bout de code, il ne trouve pas de resultat à la requete $xQuery et m'affiche "non trouvé.

Voilà mon code, adapté au flux xml en question (product remplace element et TDProductId le champ ID)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$id = '172667839';
$filename = 'test.xml';
$xDoc = new DOMDocument();
$xDoc->load($filename);
$xPath = new DOMXPath($xDoc);
$xQuery = $xPath->query("/product/product[TDProductId=\"".$id."\"]");
if($xQuery->length != 0 ) {
   $xRes = new DOMDocument();
   $xRes->loadXML("<<dummy/>");
   $xRes->documentElement->parentNode->replaceChild($xRes->importNode($xQuery->item(0), true), $xRes->documentElement);
   echo $xRes->saveXML();
} else {
   echo "Non trouvé...";
}
?>
Je vais continuer d'explorer ta piste xPath en me ballandant sur le net pour voir où ça coince. Une question : ca va ecraser mon xml de base ? si ca créé un autre doc, on peut préciser son nom de fichier ???

merci encore de ton aide !
infiniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 19h34   #6
Invité régulier
 
Inscription : novembre 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 50
Points : 7
Points : 7
attends c'est bon ! je viens de voir un script qui utilisait un double slash dans le chemin de la requete et là ca marche !!! Genial un gros merci à toi !
infiniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 20h25   #7
Membre Expert
 
Avatar de alain.couthures
 
Inscription : avril 2007
Messages : 889
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2007
Messages : 889
Points : 1 061
Points : 1 061
N'ayant pas vu la racine du document en question, je l'avais appelé "elements" dans mon bout de code.

Le double slash n'est pas très efficace en XML car il demande de parcourir toute l'arborescence quelle que soit la profondeur... mais il marche très bien quand même !
__________________
Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/
alain.couthures est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 20h39   #8
Invité régulier
 
Inscription : novembre 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 50
Points : 7
Points : 7
Tout à fait exact! en y regardant de plus pres, j'avais un noeud (c'est comme cela qu'on appele les balises qui encadrent les données xml je crois ??) qui englobait toutes mes données et que j'aurais du déclarer dans le chemin. Du coup, sans double slash cela marche parfaitement bien. Encore merci pour ton aide !!!
infiniti 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 04h54.


 
 
 
 
Partenaires

Hébergement Web