当我从localhost上的MySQL数据库创建XML RSS Feed时出现以下错误:
Extra content at the end of the document
这是我的代码:
<?php
// PDO connect *********
function connect() {
return new PDO('mysql:host=localhost;dbname=lookout', 'admin', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
$pdo = connect();
// posts *******************************
$sql = 'SELECT * FROM `event` ORDER BY serial DESC';
$query = $pdo->prepare($sql);
$query->execute();
$rs_post = $query->fetchAll();
// The XML structure
$data .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
$data .= '<channel>';
foreach ($rs_post as $row) {
$data .= '<item>';
$data .= '<time>'.$row['timestamp'].'</time>';
$data .= '<date>'.$row['timestamp'].'</date>';
$data .= '<location>'.$row['longitude'].'</location>';
$data .= '<report>'.$row['details'].'</report>';
$data .= '</item>';
}
$data .= '</channel>';
$data .= '</rss> ';
header('Content-Type: application/xml');
echo $data;
?>
没有根标签丢失,一切似乎都是有序但显然不是。
答案 0 :(得分:1)
根据@ fejese的评论,这可能是由于您的数据库中未转义的内容。而不是手动使用字符串构建文档,为什么不使用像DomDocument这样的已建立的库来以安全的方式创建元素?
以下是使用DOMDocument构建RSS Xml Feed的示例,而不是通过字符串连接手动执行此操作。这样,数据库中可能存在的无效字符序列的所有繁重工作都由库完成:
$xml = new DOMDocument('1.0', 'utf-8');
$element = $xml->createElement('rss');
$rss = $xml->appendChild($xml->createElement("rss"));
$rss->setAttribute("version","2.0");
$rss->setAttribute("xmlns:atom","http://www.w3.org/2005/Atom");
$channel = $xml->createElement("channel");
foreach ($rs_post as $row) {
$item = $xml->createElement("item");
$item->appendChild($xml->createElement("time", $row['timestamp']));
$item->appendChild($xml->createElement("date", $row['timestamp']));
$item->appendChild($xml->createElement("location", $row['longitude']));
$item->appendChild($xml->createElement("report", $row['details']));
$channel->appendChild($item);
}
$rss->appendChild($channel);
header('Content-Type: application/xml');
echo $xml->saveXML();
答案 1 :(得分:0)
这是导致问题的$ data附加。
首次使用$data = "";
之前$data
删除了错误。
进入显示错误的xml文档的源代码会产生更好更详细的错误,并说出Variable doesn't exist: data
的内容。
修改强>
斯图尔特在另一个答案中所说的也可能导致同样的问题,他提出了另一种使用DOM库创建XML RSS提要的有趣观点。