如何将更改的 SimpleXML 对象保存回文件?
Posted
技术标签:
【中文标题】如何将更改的 SimpleXML 对象保存回文件?【英文标题】:How to save changed SimpleXML object back to file? 【发布时间】:2011-03-26 00:08:45 【问题描述】:所以,我有这段代码在我的 XML 文件中搜索特定节点,取消设置现有节点并插入具有正确数据的全新子节点。有没有办法让这些新数据使用 simpleXML 保存在实际的 XML 文件中?如果没有,是否有另一种有效的方法来做到这一点?
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;
【问题讨论】:
【参考方案1】:不确定我是否理解该问题。 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');
【讨论】:
【参考方案2】:如果要保存,可以使用dom_import_simplexml
转换为DomElement并保存:
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();
【讨论】:
那么看看我上面的代码,这会将我更新的 $xml 对象保存到 $filename 是什么? 我尝试将其更改为 $dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->格式输出=真; $dom->loadXML($xml->asXML()); $dom->保存($文件名);但文件中仍然没有更新 好的,实际上它现在可以使用 $dom->save($filename)...谢谢! @Sarfraz 您的示例不使用dom_import_simplexml
。您正在从asXML()
加载XML 字符串,这是使用SimpleXml 输出或保存文件 的函数,那么为什么要使用DOM?使用 DOM 的唯一优势是您可以格式化输出,这仅在人们手动创作时才需要。
@Gordon:我忘了添加那行,但后来在看到 OP 的评论后,他说它有效,然后我不再写了,否则是的,它是需要的,现在你的评论就在那里OP,如果他愿意的话。以上是关于如何将更改的 SimpleXML 对象保存回文件?的主要内容,如果未能解决你的问题,请参考以下文章