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 01/08/2007, 18h55   #1
Membre à l'essai
 
Avatar de ia.jenny
 
Inscription : août 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 73
Points : 22
Points : 22
Par défaut [DOM] problème avec XML

Bonjour,
Je suis novice en php, et je ne comprends pas encore tout.
Je voudrais afficher "ok, je ne fait plus de bruit" quand $world = "silence"

Code XML :
1
2
3
4
5
<?xml version="1.0" encoding="ISO-8859-1" ?>
<contacts>
  <contact><In>silence</In><Out>ok, je ne fait plus de bruit</Out></contact>
  <contact><In>écoute</In><Out>je suis toutes ouies</Out></contact>
</contacts>

Le programme plante a la linge :
Code :
echo $Out->firstChild->nodeValue . "<br />";
Donc, que dois je faire pour corriger cette erreur.
Comment déclaré $Out pour que ça fonctionne en gardant ma fonction openXML ?
Merci beaucoup.
@+

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function  openXML($File,$world)
{
  $dom = new DomDocument;
  $dom->load($File);
  $contact = $dom->getElementsByTagName('contact')->item(0);
  $listeContact = $contact->getElementsByTagName('In');
  foreach($listeContact as $In)
  {
    if($world==$In->firstChild->nodeValue)
 { 
  echo $Out->firstChild->nodeValue . "<br />"; // Bup ICI!!!!
 }
  }
}
?>
 
<?php
   openXML("toto1.xml","silence");
?>
ia.jenny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 19h40   #2
Membre du Club
 
Développeur informatique
Inscription : février 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2007
Messages : 70
Points : 61
Points : 61
Envoyer un message via MSN à f.lam
ta variable $Out ne correspond a rien du tout
essaie de debugger ton code en placant un "print_r($In)" dans ta boucle afin de voir ce que ton foreach t'affiche comme valeur
f.lam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 19h51   #3
Membre à l'essai
 
Avatar de ia.jenny
 
Inscription : août 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 73
Points : 22
Points : 22
Salut
Je sais très bien que $Out ne correspond a rien du tout.
Citation:
Comment déclaré $Out pour que ça fonctionne en gardant ma fonction openXML ?
Avec $In, ça fonctionne, mais je n'obtiens pas ce que je veux.
Merci
@+
ia.jenny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 20h15   #4
Membre du Club
 
Développeur informatique
Inscription : février 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2007
Messages : 70
Points : 61
Points : 61
Envoyer un message via MSN à f.lam
Essaie deja de prendre le tag <contact> qui est ton container
a l'interieur de cet objet qui correspond a contact, tu as 2 valeurs , ton IN et ton OUT
tu devrais parser ton xml dans un tableau puis analyser ton tableau au lieu d'analyser directement ton xml peut etre ...


sinon , Personnellemnt j'utilise dans php 5 la fonction simple_xml_load_file qui me retourne un objet xml super bien organisé

essaie toujours

bon courage
f.lam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 20h26   #5
Membre à l'essai
 
Avatar de ia.jenny
 
Inscription : août 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 73
Points : 22
Points : 22
Merci,
Je vais essayer avec le « simple_xml_load_file ».
Par compte, je suis toujours ouvert pour une autre solution.
Encore merci
@+
ia.jenny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h11   #6
Membre éclairé
 
Inscription : juin 2007
Messages : 341
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 341
Points : 397
Points : 397
Par défaut t'es pas loin mais...

ce script fonctionne regarde bien il n'y à pas de grosse différence :
bon en fait il y avait un gros souci dans ta condition, pense à utiliser
utf8_decode si tu à mot avec accent, sinon plantage et un soucis avec $listecontact.voila voila


$fichier=toto.xml;
$word=silence;

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$doc = new DOMDocument;
$doc->load($fichier);;
$items = $doc->getElementsByTagName('contact');
 
$listeContact = $doc->getElementsByTagName('In');
print_r($listeContact);
for ($i = 0; $i < $listeContact->length; $i++) {
 
if(utf8_decode($listeContact->item($i)->nodeValue)==$word){
    echo utf8_decode($items->item($i)->nodeValue ). "\n";
}
}
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 18h06   #7
Membre à l'essai
 
Avatar de ia.jenny
 
Inscription : août 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 73
Points : 22
Points : 22
Merci,
Ça fonctionne, mais un petit soucie. J’obtiens :
silenceok, je ne fait plus de bruit
Comment se fait-il que « silence » apparaisse.
Merci beaucoup.
@+


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function  openXML($File,$world)
{
  $dom = new DomDocument;
  $dom->load($File);
  $items = $dom->getElementsByTagName('contact');
  $listeContact = $dom->getElementsByTagName('In');
  for ($i = 0; $i < $listeContact->length; $i++){
   if(utf8_decode($listeContact->item($i)->nodeValue)==$world){
    echo utf8_decode($items->item($i)->nodeValue ). "\n";
	}
  }
}
?>
 
<?php
  openXML("toto1.xml","silence");
?>
ia.jenny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 09h49   #8
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Pour info, XPath est adapté à ce que tu souhaites faire
Exemples :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui 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 04h08.


 
 
 
 
Partenaires

Hébergement Web