Page 1 sur 2
Liste avec fichier xml
Posté : 31 mars 2010, 20:13
par Typher007
Bonjour à tous,
Alors voilà je vous expose mon problème, j'ai un fichier .xml dans cette configuration là :
<items>
<item id="1">
<title>test</title>
<description>test</description>
</item>
</items>
Et avec l'aide d'un fichier php, j'aimerais tout d'abord afficher les éléments "<item>" dans une liste puis pouvoir supprimer un élément choisit suivant son id..
J'ai donc essayé de faire cela comme ceci :
<?php
$dom = new DomDocument;
$dom->load("../news.xml");
$listeItem = $dom->getElementsByTagName('item');
foreach($listeItem as $item)
echo $item->firstChild->nodeValue . "<br />";
?>
Le problème c'est que cela ne m'affiche rien du tous alors que si je met par exemple pour le TagName "<description>" cela marche parfaitement.
Donc si quelqu'un peux m'éclairer sur ce problème ?
Merci d'avance
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 09:22
par macgawel
Bonjour.
1. Il y a un sous-forum XML, ton sujet y aurait peut-être plus sa place.
2. Tu veux afficher quoi, au juste ?
Si on prend ton exemple de fichier XML, quel serait le résultat attendu ?
Essaye :
echo "<p>".$item->firstChild->nodeValue."</p>"; pour voir - dans le source - si le nodeValue te renvoie quelque chose, ou si c'est réellement vide.
J'ai testé, ça renvoie bien quelque chose...
Le "truc", c'est que ton fichier XML est bien indenté, et tout. Du coup, pour Domdocument, le "firstChild" de item, c'est la chaîne de caractère qui se trouve juste après la balise <item id="1">. C'est à dire le retour à la ligne...
La meilleure solution, à mon avis, c'est d'appeler le noeud enfant par son nom. Comme ça si tu changes l'ordre pour une raison ou une autre tu n'as pas à refaire le code. Ca te simplifiera la maintenance...
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 13:07
par Typher007
Bonjour.
1. Il y a un sous-forum XML, ton sujet y aurait peut-être plus sa place.
2. Tu veux afficher quoi, au juste ?
Si on prend ton exemple de fichier XML, quel serait le résultat attendu ?
Essaye :
echo "<p>".$item->firstChild->nodeValue."</p>"; pour voir - dans le source - si le nodeValue te renvoie quelque chose, ou si c'est réellement vide.
J'ai testé, ça renvoie bien quelque chose...
Le "truc", c'est que ton fichier XML est bien indenté, et tout. Du coup, pour Domdocument, le "firstChild" de item, c'est la chaîne de caractère qui se trouve juste après la balise <item id="1">. C'est à dire le retour à la ligne...
La meilleure solution, à mon avis, c'est d'appeler le noeud enfant par son nom. Comme ça si tu changes l'ordre pour une raison ou une autre tu n'as pas à refaire le code. Ca te simplifiera la maintenance...
Salut, merci de me donner un petit main, en faite mon fichier xml est un fichier dans lequel j'y ajoute des news, et donc j'aimerais pouvoir faire une liste des éléments "<item>" pour pouvoir les supprimer en les cochant par exemple.
Et le code que tu m'as donné ne m'affiche rien, mais si je met "<title>" sa m'affiche le denier élément de mon xml
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 13:13
par stealth35
quelle ID tu veux surppimer ? tu peu utiliser Xpath pour ca
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 13:35
par Typher007
quelle ID tu veux surppimer ? tu peu utiliser Xpath pour ca
Bah en faite mon fichier xml est comme ceci
<items>
<item id="1">
<title>test</title>
<description>test</description>
</item>
<item id="2">
<title>test</title>
<description>test</description>
</item
</items>
Donc j'aimerais supprimer tous ce qui est en gras ( l'item 1).
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 13:55
par stealth35
juste l'item 1 ?
EDIT : le premier ? ou celui qui est item 1 ?
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:14
par stealth35
$dom = new DomDocument();
$dom->load('data.xml');
$xpath = new DOMXPath($dom);
$query = $xpath->query('//item')->item(0);
//$query= $xpath->query('//item[@id="1"]')->item(0); //si avec id
$dom->documentElement->removeChild($query);
echo $dom->saveXML();
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:26
par Typher007
$dom = new DomDocument();
$dom->load('data.xml');
$xpath = new DOMXPath($dom);
$query = $xpath->query('//item')->item(0);
//$query= $xpath->query('//item[@id="1"]')->item(0); //si avec id
$dom->documentElement->removeChild($query);
echo $dom->saveXML();
Oui je veux bien supprimer l'élément item 1, ta solution marche parfaitement, néanmoins j'ai une petite question, ce que tu viens de proposer ne supprime pas physiquement dans le xml les lignes ? sa le retire juste c'est ça ? ( Parce que l'item 1 est toujours dans mon xml )
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:28
par stealth35
pour supprimer physiquement utilise
save
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:34
par devlop78
C'est drôle j'avais jamais entendu parler de domDocument. Cela dit je suis pas très XML puisque un jour j'ai fait une liste de département en XML, j'ai voulu utiliser une librairie php qui dénoue (lol) les noeuds etc pour faire une recherche Code postal -> ville, et ça mettait 3 plombes. En faisant un fichier avec un code postal séparé de la ville par un "|", j'ai fait un petit code php qui s'éxecutait 30 fois plus vite ... et si ça avait été Mysql ça aurait été aussi rapide ...
Pour en revenir, en fait tu traites ton fichier de la meme manière que javascript ... ??? Heureusement je vais avoir un module de 35h sur XML ^^
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:38
par stealth35
DomDocument c'est le bien

, (autant pour les XML que pour du HTML)
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:41
par devlop78
OUai
$dom->getElementsByTagName('item')
Ca me fait penser à Javascript Loool ... qui utilise DOM aussi tu vas me dire. Mais ça c'est cool. Quand tout respecte les normes et fonctionne de la même manière, on a qqchose de cohérent ... Si seulement ça pouvait être le cas (reconnaissance du sélecteur ">" CSS par IE 6 par exemple, pour ne citer que ça

)
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:45
par stealth35
IE6 c'est le mal

Re: Liste avec fichier xml
Posté : 01 avr. 2010, 14:46
par devlop78
Re: Liste avec fichier xml
Posté : 01 avr. 2010, 15:34
par Typher007
pour supprimer physiquement utilise
save
Merci beaucoup stealth c'est exactement ce que je rechercher !
Bonne journée à vous tous et merci encore.