gpt4 book ai didi

php - 如果字段为空,如何跳过 RSS 项目?

转载 作者:行者123 更新时间:2023-12-03 16:12:37 25 4
gpt4 key购买 nike

另一件小事让我发疯...我想拉入 RSS 提要并使用 PHP 显示它。它要求提供 mrss 描述(因为它没有附加所有额外的垃圾)。唯一的问题是提要有广告。因此,当脚本要求广告的媒体描述(没有广告)时,整个页面都会失败。

我试过根据长度使用 continue 和 if...else,但它仍然不起作用..

$xml=("http://feeds.abcnews.com/abcnews/gmavideos");
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');

for ($i=0; $i<=10; $i++)
{
$item_title=$x->item($i)->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagNameNS('http://www.pheedo.com/namespace/pheedo', 'origLink')
->item(0)->childNodes->item(0)->nodeValue;
$item_desc=$x->item($i)->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'description')
->item(0)->childNodes->item(0)->nodeValue;

if ($x->length == 0) {
exit('etc.');
}
else {
echo ("<p><a href='" . $item_link
. "' target='_blank'>" . $item_title . "</a>");
echo ("<br />");
echo ($item_desc . "</p>");
}
}

任何指导表示赞赏!

最佳答案

没有看到错误消息,我无法确定,但脚本很可能因为这一行而失败:

$item_desc=$x->item($i)->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'description')->item(0)->childNodes->item(0)->nodeValue;

如果没有 description 元素,则 getElementsByTagNameNS()将返回一个空 DOMNodeList ,所以 ->item(0)->childNodes将失败。

你需要把它们分开。
$item_desc_nodes = $x->item($i)->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'description');
if ($item_desc_nodes->length) {
$item_desc = $item_desc_nodes->item(0)->childNodes->item(0)->nodeValue;
} else {
continue;
}

不过,老实说,您确实应该使用 XPath 而不是 getElementsByTagNameNS .

您还应该使用 ->textContent而不是 ->childNodes->item(0)->nodeValue .

更新:这就是我使用 XPath 完成相同任务的方式
$xml = 'http://feeds.abcnews.com/abcnews/gmavideos';
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

$xpath = new DOMXPath($xmlDoc);
$xpath->registerNamespace('media', 'http://search.yahoo.com/mrss/');
$xpath->registerNamespace('pheedo', 'http://www.pheedo.com/namespace/pheedo');

// filter out the ads in the xpath expression itself by saying there must be
// a pheedo:origLink element in the item
$items = $xpath->query('/rss/channel/item[pheedo:origLink][position() < 11]');

$linktmpl = '<p><a href="%s" target="_blank">%s</a><br />%s</p>'."\n";

foreach($items as $item) {
$item_title = $xpath->evaluate('string(title)', $item);
$item_link = $xpath->evaluate('string(pheedo:origLink)', $item);
$item_desc = $xpath->evaluate('string(media:description)', $item);

$escaped = array_map('htmlspecialchars', array($item_link, $item_title, $item_desc));
vprintf($linktmpl, $escaped);
}

关于php - 如果字段为空,如何跳过 RSS 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com