2010-08-05 2 views
27

J'ai donc ce code qui recherche un nœud particulier dans mon fichier XML, désactive un nœud existant et insère un nouveau nœud enfant avec les données correctes. Existe-t-il un moyen d'enregistrer ces nouvelles données dans le fichier XML réel avec simpleXML? Sinon, existe-t-il une autre méthode efficace pour le faire?Comment sauvegarder l'objet SimpleXML modifié dans le fichier?

public function hint_insert() { 

    foreach($this->hints as $key => $value) { 

     $filename = $this->get_qid_filename($key); 

     echo "$key - $filename - $value[0]<br>"; 

     //insert hint within right node using simplexml 
     $xml = simplexml_load_file($filename); 

     foreach ($xml->PrintQuestion as $PrintQuestion) { 

      unset($xml->PrintQuestion->content->multichoice->feedback->hint->Passage); 

      $xml->PrintQuestion->content->multichoice->feedback->hint->addChild('Passage', $value[0]); 

      echo("<pre>" . print_r($PrintQuestion) . "</pre>"); 
      return; 

     } 

    } 

} 

Répondre

54

Je ne suis pas certain de comprendre le problème. La méthode asXML() accepte un nom de fichier facultatif en tant que paramètre qui enregistre la structure en cours en tant que fichier XML dans un fichier. Donc, une fois que vous avez mis à jour votre XML avec les conseils, sauvegardez-le simplement dans un fichier.

// Load XML with SimpleXml from string 
$root = simplexml_load_string('<root><a>foo</a></root>'); 
// Modify a node 
$root->a = 'bar'; 
// Saving the whole modified XML to a new filename 
$root->asXml('updated.xml'); 
// Save only the modified node 
$root->a->asXml('only-a.xml'); 
2

Si vous souhaitez enregistrer le même, vous pouvez utiliser dom_import_simplexml convertir en DomElement et économisez:

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($simpleXml->asXML()); 
echo $dom->saveXML(); 
+0

recherche donc à mon code ci-dessus, cela sauvera mon jour objet xml $ à tout $ filename est? – ThinkingInBits

+0

J'ai essayé de le changer en $ dom = new DOMDocument ('1.0'); \t \t \t $ dom-> preserveWhiteSpace = false; \t \t \t $ dom-> formatOutput = true; \t \t \t $ dom-> loadXML ($ xml-> asXML()); \t \t \t $ dom-> save ($ filename); Mais toujours pas de mise à jour dans le fichier – ThinkingInBits

+0

Ok, en fait ça marche maintenant avec le $ dom-> save ($ filename) ... Merci! – ThinkingInBits