Ecrire dans du XML (PHP 4 et 5)

1 message   •   Page 1 sur 1
Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 juin 2005, 10:26

Il existe 2 méthodes (à ma connaissance) en PHP pour écrire dans un fichier XML.

Rappelons que SimpleXMLne permet que de lire les données dans les versions de PHP inférieur à 5.1.3. Les fonctions attachées à SimpleXML permettent d'atteindre facilement le contenu de n'importe quelle balise ou attribut du document XML.
En fait, on peut même modifier ce contenu, mais pas ajouter de balise.
A ce propos, je vous recommande l'article de JournalduNet sur SimpleXML

Il est à noter que depuis PHP 5.1.3, SimpleXML est capable d'ajouter des enfants et des attributs. Vous êtes donc invités à vérifier votre version de PHP (par le phpinfo() bien entendu).

Pour ajouter des balises, on peut :
  1. Ecrire dans le fichier de façon classique en PHP
    A ce moment, le principal problème réside dans le fait d'écrire au bon endroit. En effet, pour écrire au début du fichier, il faut écrire après la déclaration XML[/color]

    Code : Tout sélectionner

    <?xml version="1.0" encoding="ISO-8859-1"?>

    Et même après la première balise contenante. (définie par le créateur du fichier).
    Ou bien, si l'on veut écrire à la fin, il faut écrire avant dernière balise fermante contenante.

    Fonctions utiles :
    - fpassthru() permet de lire le contenu du fichier du pointeur à la fin.
    - fopen() (mais un coup d'oeil au tutorial PHPFrance vous éclairera sur votre utilité).
    - feof() permet de vérifier si le pointeur est à la fin du fichier
    - fseek() pour déplacer le pointeur

  2. Utiliser les fonctions de DOMXML
    Si vous avez déjà manipulé le DOM à l'aide de Javascript, vous ne serez pas perdu, car c'est le même principe.
    On ajoute des noeuds (=balise), on les accroche à un noeud parent, on leur spécifie des attributs, du contenu texte, ...
$dom = new DOMDocument('test1');
	$dom->load($fichier);
	/*nouvelle balise <file>*/
	$new_file = $dom->createElement('file');
	/*nouvelle balise <type>*/
	$new_type = $dom->createElement('type');
	$type_content = $dom->createTextNode('ppt');
	$letype = $new_type->appendChild($type_content);
	$lefile = $new_file->appendChild($new_type);
	/*on rattache tout le <file> au DOM*/
	$dom->appendChild($new_file);
/*on enregistre dans un fichier*/
$dom->save("test.xml");
Ensuite, une fois que l'arbre est construit, on enregistre dans le fichier avec DOM->save()

1 message   •   Page 1 sur 1