2016-11-25 1 views
0

Je pense que cette tâche est de ne pas dur, mais il semble que je ne peux pas le comprendre ...ajouter plusieurs enfants à un élément XML avec PHP

Ce sont les données que j'ai:

 $_SESSION["username"] 
     $_SESSION["id"] 

Je veux les stocker dans un fichier XML appelé accounts.xml lors de l'enregistrement. Cette question ne concerne pas l'ensemble du processus, je me demande seulement comment stocker cela correctement. Une fois le processus que je veux avoir ces nouvelles structures dans mon fichier XML:

 <account> 
      <username> value of $_SESSION["username"] </username> 
      <user_id> value of $_SESSION["id"] </user_id> 
     </account> 

C'est le code que je utilise jusqu'à présent:

 $xml = simplexml_load_file('accounts.xml'); 

     $new = new SimpleXMLElement("<account></account>"); 
     $new->addChild('username', '$_SESSION["username"]'); 
     $new->addChild('user_id', '$_SESSION["id"]'); 

     file_put_contents('accounts.xml', $xml->asXML()); 

J'ai essayé quelques variations, mais généralement je finis par avec quelque chose comme ceci:

 <username> $_SESSION["username"] 
      <user_id> $_SESSION["id"] </user_id> 
     </username> 

comme vous pouvez le voir, j'ai plusieurs problèmes:

1 .: < compte> l'élément n'est même pas créé. 2 .: le user_id est dans le nom d'utilisateur - je ne veux pas que et 3 .: les variables elles-mêmes sont stockées dans le fichier, pas leurs valeurs ...

Pouvez-vous s'il vous plaît aidez-moi à faire les choses , ici?

Note: il est important, que lors de l'exécution une autre inscription, ce code fonctionne à nouveau, sans supprimer ou quoi que ce soit d'écraser, en ajoutant simplement une autre structure telle que publiée ci-dessus

Merci à l'avance!

+0

Est-ce une faute de frappe mais vous enregistrez '$ xml' dans le fichier, pas' $ new'? – Parfait

Répondre

0
 $xml = simplexml_load_file('accounts.xml'); 


     $account = $xml->addChild('account'); 
     $account->addChild('username', $_SESSION["username"]); 
     $account->addChild('user_id', $_SESSION["id"]); 


     file_put_contents('accounts.xml', $xml->asXML()); 

SOLVED

0

Je suggère fortement d'utiliser DOM ou XMLWriter pour créer XML. Les Apis sont beaucoup plus propres et plus puissants. Dans DOM il dispose de 2 parties:

  1. créer le noeud en utilisant une méthode DOMDocument comme createElement(), createTextNode().
  2. Ajouter le nœud à son parent (document ou élément) à l'aide appendChild(), insertChild() ...

De plus, vous pouvez utiliser les propriétés et méthodes du noeud pour le changer.

$document = new DOMDocument(); 
$account = $document 
    ->appendChild($document->createElement('account')); 
$account 
    ->appendChild($document->createElement('username')) 
    ->appendChild($document->createTextNode('John Doe')); 
$account 
    ->appendChild($document->createElement('user_id')) 
    ->appendChild($document->createTextNode(42)); 
$document->formatOutput = TRUE; 
echo $document->saveXml(); 

XMLWriter:

$writer = new XMLWriter(); 
$writer->openMemory(); 
$writer->setIndent(true); 
$writer->startDocument('1.0', 'utf-8'); 
    $writer->startElement('account'); 
    $writer->writeElement('username', 'John Doe'); 
    $writer->writeElement('user-id', 42); 
    $writer->endElement(); 
$writer->endDocument(); 
echo $writer->outputMemory(); 

Vous devez garder à l'esprit que tout dans un document XML est un nœud. Un élément, des attributs, des sections de cdata, etc. SimpleXML est limité et vous permet seulement d'accéder à certaines parties de celui-ci.

+0

merci beaucoup monsieur, je vais garder cela à l'esprit et le mettre en œuvre dès que je reviens à cela! – Maxischl