Page 1 sur 1

PHP DOM & XML

Posté : 29 oct. 2010, 18:28
par didav
Salut à tous,
Je rencontre pas mal de problème pour lire un XML avec par PHP DOM. L'utilisation de getElementById me rend fou.
Voici la composition de mon XML (news_fr.xml) :

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?> <niouz> <news id="a1"> <news_date>01-01-2010</news_date> <news_langue>fr</news_langue> <news_categorie>Qualit&eacute;</news_categorie> <news_titre>test 1</news_titre> <news_texte>tetvcrfds</news_texte> <news_image>images/actus/</news_image> </news> <news id="a2"> <news_date>01-01-2010</news_date> <news_langue>fr</news_langue> <news_categorie>Qualit&eacute;</news_categorie> <news_titre>test 2</news_titre> <news_texte>regrgre</news_texte> <news_image>images/actus/</news_image> </news> </niouz>
Voici la composition de mon PHP pour la lecture de mes noeuds <news>:
                <?php

		if(isset($_GET['langue'])) $langue = $_GET['langue'];
		else $langue = '';
		if(isset($_GET['id'])) $id = $_GET['id'];
		else $id = '';

					if($langue == 'fr') {$fichier = 'news_fr.xml';}
					else {$fichier = 'news_uk.xml';}
					
					$dom = new DOMDocument('1.0', 'utf-8');
					$dom->validateOnParse = true;
					$dom->load($fichier);
					
					$news_node = $dom->getElementById('a'+$id);					
					$news_date = $news_node->nodeValue;

					echo '<h1>'.$news_date.'</h1>';
					
				?>
J'ai l'erreur suivante : Notice: Trying to get property of non-object in "ligne echo"
Comment récupérer les différents noeuds qui compose <news> par un id.
Merci d'avance pour votre aide.

Re: PHP DOM & XML

Posté : 29 oct. 2010, 18:38
par devlop78
Moi aussi il m'a rendu fou. J'ai laissé tomber ^^

Re: PHP DOM & XML

Posté : 29 oct. 2010, 18:41
par Cyrano
Peut-être qu'en faisant des concaténations avec un « . » comme en PHP au lieu d'un « + » comme en JavaScript ça fonctionnerait mieux ?
En faisant :
$news_node = $dom->getElementById ('a'. $id);
Et non
$news_node = $dom->getElementById ('a'+ $id);
:-*

Re: PHP DOM & XML

Posté : 29 oct. 2010, 18:47
par didav
Modif réalisé : + en .
Rien n'a changé.

J'ai essayé ca aussi :
$news_node = $dom->getElementById('a'.$id)->tagName;
echo '<h1>'.$news_node.'</h1>';
Toujour la même erreur sur l'echo : Notice: Trying to get property of non-object

Une après-midi de flinguer sur ce petit bug. J'ai cherché et testé pas mal de truc.
J'aimerai tellement faire fonctionner l'attribut "id" de news et passer par cette fonction getElementById.

Si pas de réponse dans le weekend, je ferai un noeud <news_id>.
J'invoque les dieux du débugage, ceux du PHP et toutes les divinités XML !!!

Re: PHP DOM & XML

Posté : 29 oct. 2010, 19:34
par Cyrano
Je vois, on va t'aiguiller un peu alors : utilise simple_xml.

C'est fait à l'arrache, mais le résultat est là. Je n'ai pas fait de fioritures, à toi d'arranger les détails :
<?php
$langue  = (isset ($_GET['langue'])) ? $_GET['langue'] : 'fr';
$id      = (isset ($_GET['id']))     ? $_GET['id']     : 1;
$fichier = ($langue == 'fr')         ? 'news_fr.xml'   : 'news_uk.xml';

$sx = simplexml_load_file($fichier);

$sId = 'a'. $id;
foreach($sx as $n => $news)
{
    if($news['id'] == $sId)
    {
        $news_node = $sx->news;
    }
}

$news_date = (string) $news_node->news_date;
echo '<h1>' . $news_date . '</h1>';
?>

Re: PHP DOM & XML

Posté : 30 oct. 2010, 18:32
par stealth35
un xpath serait plus simple :wink:
$sx->xpath("//news[@id=\"a$id\"]");

Re: PHP DOM & XML

Posté : 02 nov. 2010, 11:39
par didav
Merci pour vos aides.
J'ai écouté vos conseils. J'ai finalement utilisé Simple XML pour parvenir à mes fins.
Sujet clos.
A bientot