Php 从MySQL表创建xml rss源时出错

Php 从MySQL表创建xml rss源时出错,php,mysql,xml,rss,Php,Mysql,Xml,Rss,当我从localhost上的MySQL数据库制作XML RSS提要时,出现以下错误: 文档末尾的额外内容 这是我的密码: <?php // PDO connect ********* function connect() { return new PDO('mysql:host=localhost;dbname=lookout', 'admin', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO:

当我从localhost上的MySQL数据库制作XML RSS提要时,出现以下错误:

文档末尾的额外内容

这是我的密码:

     <?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;
?>

没有根标签丢失,一切似乎都井然有序,但显然不是

根据@fejese的评论,这很可能是由于数据库中的未替换内容造成的。与其手动使用字符串构建文档,为什么不使用像DomDocument这样的已建立的库以安全的方式创建元素呢

下面是一个使用来构建RSS Xml提要的示例,而不是通过字符串连接手动完成此操作。这样,数据库中可能存在的所有转义无效字符序列的繁重工作都由库完成:

$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();

是$data上的附加导致了问题

A
$data=”“$data
之前,code>删除了错误

查看显示错误的xml文档的源代码时,给出了一个更好、更详细的错误,并指出
变量不存在:data

编辑:


Stuart在另一个答案中所说的也可能导致同样的问题,他提出了一个有趣的观点,即使用DOM库以另一种方式创建XML RSS提要。

如果您包含生成的示例,可能会有所帮助。难道不是来自数据库的东西弄乱了输出吗?可能是未跳过的
吗?开始调试最简单的方法应该是检查实际输出。嘿,你的答案很有效率,很有帮助,但这不是问题所在。:)