Impossible de sauvegarder les données (php et XML)

Signaler
Messages postés
1
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
2 octobre 2006
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour;

J'ai le message d'erreur
Fatal error: Call to a member function appendChild() on a non-object in C:\wamp\www\newsxml.php on line 30

lorsque Je veux ajouter un enregistrement dans le fichier xml suivant via DOM en php.

<?xml version="1.0" standalone="yes"?>

<!DOCTYPE Base[
<!ELEMENT Base (conseiller)>
<!ELEMENT conseiller (enregistrement)>
<!ATTLIST conseiller id ID #REQUIRED>
<!ELEMENT enregistrement (nom,prenom,adresse)>
<!ATTLIST enregistrement date CDATA #REQUIRED>
<!ATTLIST enregistrement matricule CDATA #REQUIRED>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT adresse (#PCDATA)>
]>

<conseiller id="Econseiller">
<enregistrement date="01/10/2006" matricule="03">
        <nom>NOM1</nom>
        PRENOM1

Ad1
</enregistrement>

<enregistrement date="30/09/2006" matricule="02">
        <nom>NOM2</nom>
        PRENOM2

Ad2
</enregistrement>

</conseiller>

Depuis un formulaire contenant le champs (matricule,nom,prenom et adresse) je poste les données
pour la sauvegarde dans le fichier xml.

$file="c:\test.xml";
$dom=new DOMDocument();
if(file_exists($file) && filesize($file)>0)
$dom->load($file);

$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$adresse=$_POST['adresse'];

$conseiller=$dom->getElementById("Econseiller"); // ligne 28

$enregistrement=$dom->createElement("enregistrement"); // ligne 29

$enregistrement=$conseiller->appendChild($enregistrement); // ligne 30
.
.
.
Lorsque j'ignore les lignes 28 et 30 et que j'affecte au noeuds enregistrement les enfants
(nom,prenom et adresse) la sauvegarde se fait dans le fichier xml mais dans le noeuds Base.
Ligne 28: j'ai aussi essayé de charger le noeuds conseiller avec getElementsByTagName idem.

merci d'avance pour votre aide.

1 réponse

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

lis la doc php.net sur la méthode DOMDocument::getElementById(), tu comprendras. getElementById() nécessite dans la plupartd es versions de PHP, d'une DTD spécifique.
Autres solutions:
- utiliser XPath, tu récupèreras alors un DOMNodeList que tu devras parcourir pour récupérer ton élément.
- utiliser l'attribut xml:id au lieu de id tout court. DOMDocument::getElementById() fonctionnera alors, mais cela dépend des versions de PHP5.