Как сохранить измененный объект SimpleXML обратно в файл?
Итак, у меня есть этот код, который ищет определенный узел в моем 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;
}
}
}
28
Author: ThinkingInBits, 2010-08-05
2 answers
Не уверен, что понимаю проблему. Тот 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');
58
Author: Gordon, 2013-07-31 15:45:01
Если вы хотите сохранить то же самое, вы можете использовать dom_import_simplexml
чтобы преобразовать в элемент DOMElement и сохранить:
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();
2
Author: Sarfraz, 2010-08-05 19:29:00