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 08/05/2007, 17h33   #1
Invité de passage
 
Inscription : mai 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 2
Points : 1
Points : 1
Par défaut [DOMXML]Récupérer certaines entrées selon un attribut

Bonjour à tous, je suis novice dans le monde du XML par contre je connais bien le PHP, je voudrais utiliser mon document xml comme une base de donnée.
Voici à quoi ressemble mon document XML:

Code XML :
1
2
3
4
5
6
 
<?xml version="1.0" encoding="ISO-8859-1" ?>
<partitions>
<morceau id="1" auteur="Sor" genre="Valse" tonal="Re min" diffi="0" titre="Valse n.5" />
<morceau id="2" auteur="Carulli" genre="Valse" tonal="Fa maj" diffi="3" titre="luciano" />
</partitions>

je cherche le code qui va me permettre de ne sélectionner que certaines lignes:
J'ai un formulaire qui permet de choisir l'attribut par le quel on recherche et la valeur de cet attribut.
exemple, je coche l'attribut "genre" et je met comme valeur "Valse" le script devrait m'afficher toutes les lignes ou l'attribut "genre" est "valse". (un moteur de recherche en gros.

Vu que c'est le tout début je n'ai pas grand chose dans mon application php à vous montrer....

voici tout de même mon maigre début:
Code :
1
2
3
4
5
6
7
8
9
10
<?php
$xmldoc="admin/results.xml";
$attri = $_GET['attribut'];
$valeur= $_GET['valeur'];
 
 
$dom = domxml_open_file($xmldoc) or die ("Impossible de l'ouvrir");
$operations = $dom->get_elements_by_tagname("morceau");
 
?>
Merci d'avance
Med_ivh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 17h58   #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
En parcourant les noeuds morceau :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Pour test
$_GET['attribut'] = 'auteur';
$_GET['valeur'] = 'Carulli';
 
$xmldoc = 'partitions.xml';
$attri = $_GET['attribut'];
$valeur = $_GET['valeur'];
 
$dom = domxml_open_file($xmldoc) or die("Impossible de l'ouvrir");
$operations = $dom->get_elements_by_tagname("morceau");
foreach ($operations as $op) {
    if ($op->node_type() == XML_ELEMENT_NODE) { // Passer d'un DOMNode à un DOMElement
        if ($op->get_attribute($attri) == $valeur) {
            echo "Le morceau numéro = " . $op->get_attribute('id') . " correspond<br/>";
        }
    }
}
En utilisant une expression XPath :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Pour test
$_GET['attribut'] = 'auteur';
$_GET['valeur'] = 'Carulli';
 
$xmldoc = 'partitions.xml';
$attri = $_GET['attribut'];
$valeur = $_GET['valeur'];
 
$dom = domxml_open_file($xmldoc) or die("Impossible de l'ouvrir");
$xpath = $dom->xpath_new_context();
$res = $xpath->xpath_eval("/partitions/morceau[@$attri='$valeur']");
foreach ($res->nodeset as $morceau) {
    echo "Le morceau numéro = " . $morceau->get_attribute('id') . " correspond<br/>";
 
}
(testé sur une version 4.4.6)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 18h12   #3
Invité de passage
 
Inscription : mai 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 2
Points : 1
Points : 1
Super c'est nickel!
Merci beaucoup!
Med_ivh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 11h50   #4
Invité régulier
 
Inscription : janvier 2007
Messages : 65
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 65
Points : 8
Points : 8
MERCI BEAUCOUP !!!!!
Bonne journée
skyangel20 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 03h15.


 
 
 
 
Partenaires

Hébergement Web