Dom xml et php4

WRInaute discret
Bonjour, après encore moulte recherche, je n'arrive pas à insérer dans un fichier a.xml d'autres items :
voici mon fichier a.xml :
Code:
<?xml version="1.0"?>
<rss version="2.0">
<user id="22">
<titre>valeur titre 1</titre>
<livre>valeur livre numero 1 </livre>
</user>
</rss>

et le fichier a.php (je suis en version php 4)
Code:
<?php
$dom_xml = xmldocfile("a.xml");
?>

Quelqu'un sait comment ajouter à cette liste d'item

<titre>valeur titre 1</titre>
<livre>valeur livre numero 1</livre>

un nouvel ensemble
<titre>valeur titre 2</titre>
<livre>valeur livre numero 2 </livre>

pour obtenir ainsi un fichier xml comme ceci :

Code:
<?xml version="1.0"?>
<rss version="2.0">
<user id="22">
<titre>valeur titre 2</titre>
<livre>valeur livre numero 2 </livre>
<titre>valeur titre 1</titre>
<livre>valeur livre numero 1 </livre>
</user>
</rss>
Merci.
 
WRInaute discret
Pour manipuler un fichier XML avec PHP, je te conseil de regarder du coté de SimpleXML ( -http://fr.php.net/manual/fr/ref.simplexml.php )

Ps: ton fichier ne semble pas être un format RSS les lignes :
<rss version="2.0"> et </rss> ne sont pas utiles.
 
WRInaute discret
lupuz a dit:
Pour manipuler un fichier XML avec PHP, je te conseil de regarder du coté de SimpleXML ( -http://fr.php.net/manual/fr/ref.simplexml.php )

Ps: ton fichier ne semble pas être un format RSS les lignes :
<rss version="2.0"> et </rss> ne sont pas utiles.
Merci pour l'element rss a retirer, je débute dans le xml.
La fonction simplexml requiert php 5 et moi j'ai php 4 donc ne fonctionne pas.
 
WRInaute discret
Nenes a dit:
Ce tutoriel pourra peu être t'aider à comprendre-> http://www.siteduzero.com/tuto-3-6950-1 ... #ss_part_4
merci j'ai testé mais j'ai des erreurs que je ne sais pas modifier.

N'existe-t-il pas une fonction qui ajoute un noeud à un endroit précis par pointage d'un item ?
En se servant de la variable dom ?
Quelque chose comme :

$temp = $dom->create_element("item");
$temp_new = $temp->appendChild($temp);

j'ai un retour Fatal error: Call to a member function on a non-object ... tout le temps...
 
WRInaute passionné
La balise RSS est utile car il faut un conteneur.
Si la variable $temp est l'élément que l'on crée, il ne faut pas associer appendChild à $temp mais au node RSS.

Code:
$rss->appendChild($temp);
 
WRInaute discret
Merci à tous ,
J'ai esssayé
Jeviensderio a dit:
La balise RSS est utile car il faut un conteneur.
Si la variable $temp est l'élément que l'on crée, il ne faut pas associer appendChild à $temp mais au node RSS.
Code:
$rss->appendChild($temp);

en fonction de a.xml :
Code:
<?xml version="1.0"?>
<rss version="2.0">
<user id="22">
//ajout ici si possible
<titre>valeur titre 1</titre>
<livre>valeur livre numero 1 </livre>
</user>
</rss>
Je fais dans a.php
Code:
$dom= xmldocfile("a.xml");
$temp = $dom->create_element("item");
$temp_new =$rss->append_child($temp);

renvoie Fatal error: Call to a member function on a non-object in ...
$rss n'est pas instancié, car je ne sais pas comment le faire.

Je voulais juste créé un nouvel élement dans mon fichier a.xml mais rien en fonctionne, c'est bizar.

Sinon merci Nenes j'ai regardé la doc que j'avais un peu déjà regardé

J'arrive juste l'exemple 3 : où je peux modifier un élément de l'item.
Mais impossible d'ajouter un nouvel item au fichier.

Je m'accroche à la doc mais c'est pas facile car il y a plus d'exemple php 5 et moi il me faut php4
Et des exemples php4 quand je teste bug !!
 
WRInaute passionné
Il faudrait avoir le code complet, parceque:
- xmldocfile est une ancienne fonction, mais supposons qu'elle soit toujours supportée
- $rss n'est pas déclarée.

Avec cette librairie, on doit définir un objet DomNode $rss;

DomDocument $doc = domxml_open_file ("fichier xml")
DomNode $rss = $doc->get_element_by_id("rss");

Je vois aussi cela dans la doc:

4.3.0 Vous n'êtes plus autorisé d'insérer un noeud à partir d'un autre document.

Bref vérifier que la librairie DomDocument est disponible et tester les fonctions fournies dans le manuel.
 
WRInaute discret
Alors je suis en PHP Version 4.4.8
Et dom xml est déclaré comme ceci :

DOM/XML enabled
HTML Support enabled
XPath Support enabled
XPointer Support enabled
DOM/XSLT enabled
DOM/EXSLT enabled



En gros pour le code tout est là :
Je cherche à créer une fonction simple qui injecte dans mon fichier xml un nouvel ensemble

1- a.xml fichier xml simple
Code:
<?xml version="1.0"?>
<rss version="2.0">
<user id="22">
//ajout ici si possible
<titre>valeur titre 1</titre>
<livre>valeur livre numero 1 </livre>
</user>
</rss>

2- a.php
<?php
//obtenir contenu
$mon_dom= xmldocfile("a.xml");
function create_noeud_simple($dom,$endroit)
{
//.....

}
create_noeud($mon_dom,$ouca);
?>

Et donc creer au moins item comme ceci :
Code:
<?xml version="1.0"?>
<rss version="2.0">
<user id="22">
<blabla>contenu....</blabla>
<titre>valeur titre 1</titre>
<livre>valeur livre numero 1 </livre>
</user>
</rss>

Après il faut peut-être mettre mon fichier en chmod 777 ou quelque chose comme ça ?
ou sauver son contenu.
En gros je cherche le mécanisme de base pour inserer juste une ligne et refermer mon fichier.
 
WRInaute passionné
Il y a un exemple complet dans la doc que j'ai modifié:

Code:
<?php
$doc = domxml_new_doc("1.0");
$root = $doc->create_element("rss");
$root = $doc->append_child($root);
$head = $doc->create_element("titre");
$head = $root->append_child($head);
$title = $doc->create_element("titre");
$title = $root->append_child($title);
$text = $doc->create_text_node("This is the title");
$text = $title->append_child($text);
$doc->dump_file("/tmp/test.xml", false, true);
?>

J'ai remplacé HTML par "rss".
Il reste à ajouter l'attribut avec create_attribute pour le créer et set_attribute pour l'ajouter.


Pas besoin de changer les permissions normalement.
 
Discussions similaires
Haut