web-dev-qa-db-fra.com

Comment sauvegarder l'objet SimpleXML modifié dans un fichier?

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 tout nouveau nœud enfant avec les données correctes. Existe-t-il un moyen d'obtenir ces nouvelles données à enregistrer dans le fichier XML réel avec simpleXML? Sinon, existe-t-il une autre méthode efficace pour ce faire?

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;

        }

    }

}
33
ThinkingInBits

Je ne suis pas sûr de comprendre le problème. La méthode asXML() accepte un nom de fichier facultatif comme paramètre qui enregistrera la structure actuelle en XML dans un fichier. Donc, une fois que vous avez mis à jour votre XML avec les conseils, enregistrez-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');
64
Gordon

Si vous souhaitez enregistrer la même chose, vous pouvez utiliser dom_import_simplexml pour convertir en DomElement et enregistrer:

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