【问题标题】:PHP XML RSS error xmlParsePI : no target namePHP XML RSS 错误 xmlParsePI:没有目标名称
【发布时间】:2017-11-12 19:16:33
【问题描述】:

请帮忙!遇到此错误: 第 11 行第 3 列的错误:xmlParsePI:没有目标名称。

第 11 行是 atom:link 标记。我尝试将链接更改为实际文件名并得到相同的错误。我在本地运行代码,所以我也尝试使用 localhost url,但仍然是同样的错误。

我是 php 新手,这是我认为是过时材料的 php 课程的作业。任何建议都会有所帮助!

<?php
require_once('./Includes/connectvars.php');
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
$builddate = gmdate(DATE_RSS, time());
?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Vintage Cars and Trains</title>
        <atom:link href="http://<?= $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'] ?>" rel="self" type="application/rss+xml" />
        <link>products.php</link>
        <description>Vintage cars and trains for lesson 9</description>
        <lastBuildDate><?php $builddate ?></lastBuildDate>
        <language>en-us</language>

<?

    $query = " SELECT * FROM products WHERE productLine = 'Vintage Cars', 'Trains' ORDER BY dateAdded DESC LIMIT 10 ";
    $result = mysqli_query($dbc, $query)
        or die("Error querying database => $query");

    //Loop through and print data
    while ($newArray = mysqli_fetch_array($result)) {
        $product_code = $newArray[productCode];
        $product_name = $newArray[productName];
        $product_line = $newArray[productLine];
        $product_scale = $newArray[productScale];
        $product_vendor = $newArray['productVendor'];
        $product_description = $newArray['productDescription'];
        $buy_price = $newArray['buyPrice'];

        $pubdate = date(DATE_RSS, strtotime($date_added));
?>

    <item>
        <title><?php echo "$product_code - $product_name"; ?></title>
        <description><?php $description ?></description>
        <link><link>localhost/PHP/Lesson9/products.php?pid=<?php $product_code ?></link>
        <guid isPermaLink="false">localhost/PHP/Lesson9/products.php?pid=<?php $product_code ?><guid>
        <pubDate><?php $pubdate ?></pubDate>
    </item>

    }

    </channel>
</rss>

【问题讨论】:

  • 您正在将 XML 生成为文本而不转义特殊字符。我强烈建议使用 XML 库(DOM 或 XMLWriter)来创建 XML,或者至少对变量值使用适当的转义。

标签: php xml rss atom-feed


【解决方案1】:

当你输出一个php变量时,请确保你使用:

<?php echo $variablename; ?>

当你想连接两个 php 变量时,请确保使用句点:

<?php echo $variablename1.' - '.$variablename2; ?>

请记住在每个php内联的末尾回显并加上分号:

<?php echo something; ?>

请记住在循环结束的地方用大括号关闭while循环:

<?php
     while (condition) {
           do something;
     }
?>

这是清理后的代码。

<?php
require_once('./Includes/connectvars.php');
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
$builddate = gmdate(DATE_RSS, time());
?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
    <title>Vintage Cars and Trains</title>
    <atom:link href="http://"<?php echo $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ?>" rel="self" type="application/rss+xml" />
    <link>products.php</link>
    <description>Vintage cars and trains for lesson 9</description>
    <lastBuildDate><?php echo $builddate; ?></lastBuildDate>
    <language>en-us</language>

<?php

$query = " SELECT * FROM products WHERE productLine = 'Vintage Cars', 'Trains' ORDER BY dateAdded DESC LIMIT 10 ";
$result = mysqli_query($dbc, $query)
    or die("Error querying database => $query");

//Loop through and print data
while ($newArray = mysqli_fetch_array($result)) {
    $product_code = $newArray[productCode];
    $product_name = $newArray[productName];
    $product_line = $newArray[productLine];
    $product_scale = $newArray[productScale];
    $product_vendor = $newArray['productVendor'];
    $product_description = $newArray['productDescription'];
    $buy_price = $newArray['buyPrice'];
}

$pubdate = date(DATE_RSS, strtotime($date_added));
?>

<item>
    <title><?php echo $product_code.' - '.$product_name; ?></title>
    <description><?php echo $description; ?></description>
    <link><link>localhost/PHP/Lesson9/products.php?pid=<?php echo $product_code; ?></link>
    <guid isPermaLink="false">localhost/PHP/Lesson9/products.php?pid=<?php echo $product_code; ?><guid>
    <pubDate><?php echo $pubdate; ?></pubDate>
</item>

</channel>
</rss>

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2011-09-18
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多