Итак, у меня есть этот код, который ищет конкретный узел в моем XML-файле, отключает существующий узел и вставляет новый дочерний узел с правильными данными. Есть ли способ получить эти новые данные для сохранения в реальном XML-файле с помощью simpleXML? Если нет, есть ли еще один эффективный метод для этого?
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; } } }
Не уверен, что я понимаю проблему. Метод asXML()
принимает необязательное имя файла как параметр, который сохранит текущую структуру как XML в файл. Поэтому, как только вы обновите свой XML с помощью подсказок, просто сохраните его обратно в файл.
// 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');
Если вы хотите сохранить то же самое, вы можете использовать dom_import_simplexml
для преобразования в DomElement и сохранения:
$dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($simpleXml->asXML()); echo $dom->saveXML();