SQL数据到XML文件

时间:2012-02-06 16:50:51

标签: php sql xml

是否可以将以下输出保存为XML文件,因为它当前只显示在源文件中?

$host = "localhost"; // host name
$user = "#"; // database user name
$pass = "#"; // database password
$database = "#"; // database name
// connecting to database
$connect = @mysql_connect($host,$user,$pass)or die (@mysql_error());
// selecting database
@mysql_select_db($database,$connect) or die (@mysql_error());

// default header(don't delete)
header("Content-Type: text/xml;charset=iso-8859-1");
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

// mytable = your content table name
$query = @mysql_query("SELECT * FROM urls");
while($row = @mysql_fetch_array($query)){
// [url] = content url
$url = $row['url'];
// [time] = content date
$date = date("Y-m-d", $row['time']);

 // NO CHANGES BELOW
        echo
        '<url>
         <loc>' . $url .'</loc>
         <lastmod>'. $date .'</lastmod>
         <changefreq>daily</changefreq>
         <priority>0.8</priority>
         </url>
        ';
    }
        echo '</urlset>';

我知道我可以使用.htaccess将文件视为XML格式,但我希望将数据保存到实际文件中。

4 个答案:

答案 0 :(得分:2)

您可以尝试更改每个回显以将该行附加到字符串变量,例如:

// Instead of
echo '<?xml version="1.0"?>';
echo '<url>';
// etc.

$xml = '<?xml version="1.0"?>';
$xml .= '<url>';
// and so on

然后使用其中一个文件功能保存到文件中。 file_put_contents是一种简单的方法:

file_put_contents("/path/to/file.xml", $xml);

更强大的解决方案,如果你想进一步发展,可以使用DOM模块来构建XML结构:

$document = new DOMDocument("1.0");

$root = $document->createElement("urlset");
$root->setAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
$document->appendChild($root);

while ($row = mysql_query($query)) {
    $item = $document->createElement("url");
    $root->append($item);
    // etc.
}

echo $document->saveXML();

答案 1 :(得分:1)

注意:这个答案假定“保存文件”是指“当有人查看页面时触发浏览器中的”另存为“对话框”。

  • text / xml实际上并不是正确的内容类型。对于通用XML,至少应该使用application / xml,或者对于XML子格式(如RSS或docx),至少应该使用适当的内容类型。
  • 如果要在客户端浏览器中触发文件下载对话框,则还需要发送内容处置标头,告诉浏览器您希望它下载文件并提供首选文件名。

您的代码存在一些需要解决的问题。

  • 过度使用@以进行错误抑制。出于各种各样的原因,这是一个坏主意。删除@运算符并以更强大的方式处理任何生成的错误。
  • 您的字符编码标题指定一个字符集(latin-1),但您的XML前导码指定了完全不同的字符集(UTF-8)。这是灾难的秘诀。

答案 2 :(得分:0)

使用输出缓冲区

ob_start();

... do everything you actually did before ...

$content = ob_get_contents();
ob_end_clean();

//Write to a file
file_put_contents('filename.xml', $content);

这就是全部...

答案 3 :(得分:0)

使用fwrite应该是直截了当的:

$f = fopen('data.xml', 'w');  //open a file for writing 
fwrite($f, $myxmltext);       // write some things to it
fclose($f);                   // close it when finished