8

我在 Codeigniter 中使用此代码生成 XML:

public function get_cuisine()
{
    $this->load->dbutil();
    $sql = "select * from cuisine";
    $query = $this->db->query($sql);
    $config = array (
        'root'    => 'root',
        'element' => 'element',
        'newline' => "\n",
        'tab'     => "\t"
    );
    echo $this->dbutil->xml_from_result($query, $config);   
}   

但这显示了一般的打印格式。如何让它显示为 XML 类型的页面?

4

4 回答 4

18

如果要直接输出文件,则需要设置 XML 标头:

使用 Codeigniter输出类

$xml = $this->dbutil->xml_from_result($query, $config);
$this->output->set_content_type('text/xml');
$this->output->set_output($xml); 

或者您可以使用纯 PHP 来设置标题

header('Content-type: text/xml');
echo $this->dbutil->xml_from_result($query, $config);

或者您可以使用 CI下载助手

$xml = $this->dbutil->xml_from_result($query, $config);
$this->load->helper('download');
force_download('myfile.xml', $xml);

或者使用文件助手将其写入文件:

$xml = $this->dbutil->xml_from_result($query, $config);
$this->load->helper('file');
$file_name = '/path/to/myfile.xml';
write_file($file_name, $xml);
// Optionally redirect to the file you (hopefully) just created
redirect($file_name); 
于 2012-04-28T06:19:39.750 回答
2

我也有同样的问题。我已经用谷歌搜索过了。找到了这个解决方案。它非常适合我。 点击这里获取源代码

只需下载并解压缩(解压缩)

然后将提取文件夹的 application->libraries 中的 xml_writer.php复制到Codeigniter项目中的 library 文件夹中。

还将application->controller 中的xml.php复制到您的控制器文件夹中

最后将提取文件夹视图中的xml.php复制到您的视图中并运行它..

就是这样...

于 2013-08-25T13:25:11.220 回答
0

定制解决方案:

$mysql_data = $this->db->get('products')
                    ->result_array();
$xml = '<root>';
foreach($mysql_data as $row){
  $xml .= '<item>
             <name>'.$row['title'].'</name>
             <price>'.$row['price'].'</price>
             <image>'.$row['pic'].'</image>
           </item>';
}
$xml .= '</root>';
$this->output->set_content_type('text/xml');
$this->output->set_output($xml);
于 2017-02-16T17:50:44.093 回答
0

对于 CodeIgniter 4,这要容易得多。您可以使用集成响应对象并执行以下操作:

return $this->response->setXML($xmlString);

这大大简化了它,在我的例子中,我使用视图生成 XML,然后使用同样的东西输出 XML,就像:

return $this->response->setXML(view('myfeed'));
于 2021-06-21T16:40:35.000 回答