为什么我的PHP生成的RSS声明流氓标签?

时间:2014-02-23 21:10:06

标签: php rss

这是我希望生成普通RSS的代码。但是,在每个<item>之后都有一个</channel></rss><?xml version="1.0"?><rss version="2.0">。我需要更改什么才能在脚本结尾处声明它应该是什么?

如果我错过了任何重要信息,请告诉我。

function jobscrape($title, $link, $root, $description, $job_location) {

header("Content-Type: application/rss+xml; charset=UTF-8");

$xml = new SimpleXMLElement('<rss/>');
$xml->addAttribute("version", "2.0");
$channel = $xml->addChild("channel");

$channel->addChild("title", $title);
$channel->addChild("link", $link);
$channel->addChild("description", "This is a description");
$channel->addChild("language", "en-us");

$html = file_get_contents($link);
$doc = new DOMDocument();
libxml_use_internal_errors(TRUE);

if(!empty($html)) {

    $doc->loadHTML($html);
    libxml_clear_errors(); // remove errors for yucky html
    $xpath = new DOMXPath($doc);

    $row = $xpath->query($job_location);

    if ($row->length > 0) {

        foreach ($row as $job) {

            $jobs = array();
            $entries = array();

            $jobs['title'] = $job->nodeValue;
            $jobs['description'] = "This is a description";
            $jobs['link'] = $job->getAttribute('href');

            array_push($entries,$jobs);

            foreach ($entries as $entry) {

                $item = $channel->addChild("item");
                $item->addChild("title", $entry['title']);
                $item->addChild("link", $entry['link']);
                $item->addChild("description", $entry['description']);

            }

            echo $xml->asXML();

        }
    }
    else { echo "row is less than 0";}
}

else {
    echo "this is empty";
}

}

1 个答案:

答案 0 :(得分:0)

创建一个 XML文档,将所有项目添加到该文档,然后在最后的完整文档上调用->asXML(); (而不是在每个片段上每次你绕过循环)。