【问题标题】:How to save changed SimpleXML object back to file?如何将更改的 SimpleXML 对象保存回文件?
【发布时间】: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;

        }

    }

}

【问题讨论】:

    标签: php xml simplexml


    【解决方案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,如果他愿意的话。
      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 2011-02-18
      • 1970-01-01
      • 2011-05-17
      • 2012-06-15
      • 1970-01-01
      • 2011-05-25
      相关资源
      最近更新 更多