【问题标题】:Count item tags from RSS feed (without knowing tag name)从 RSS 提要中计算项目标签(不知道标签名称)
【发布时间】:2014-11-02 16:54:27
【问题描述】:

我想在不知道实际标签名称的情况下从 rss 提要中获取所有使用的标签(在 $feed->channel->item 中)。是的,也许这听起来很奇怪,让我解释一下。

示例

<item>
    <title>Inademen van bloem kan astma veroorzaken</title>
    <link>http://www.nu.nl/gezondheid/3872032/inademen-van-bloem-kan-astma-veroorzaken.html</link>
    <description>Het keer op keer inademen van het fijne stof dat afkomstig is van het bakmeel bloem, kan astma veroorzaken. </description>
</item>
<item>
    <title>Inademen van bloem kan astma veroorzaken</title>
    <link>http://www.nu.nl/gezondheid/3872032/inademen-van-bloem-kan-astma-veroorzaken.html</link>
    <description>Het keer op keer inademen van het fijne stof dat afkomstig is van het bakmeel bloem, kan astma veroorzaken. </description>
    <test>Testing!</pubDate>
</item>

我想要实现的目标(上述 XML 的示例脚本输出):

  • 标记&lt;title&gt; 使用了 2 次​​li>
  • 标记&lt;link&gt; 使用了 2 次​​li>
  • 标记&lt;description&gt; 使用了 2 次​​li>
  • 标记&lt;test&gt; 使用了 1 次

我该怎么做?当我已经知道标签名称时,我无法轻松计算所有标签,但是如何在不知道&lt;item&gt; 中使用哪些标签的情况下计算它们?

目前我的脚本只是加载提要并循环/显示项目:

<?php
getFeed('http://www.nu.nl/feeds/rss/gezondheid.rss');

function getFeed($feedUrl) {

    $feedUrl = file_get_contents($feedUrl);
    $feedXml = new SimpleXmlElement($feedUrl);
    $itemTags = array();

    echo "<ul>";
    foreach($feedXml->channel->item as $item) {
        echo "<li><a href='$item->link'>" . $item->title . "</a></li>";
    }
    echo "</ul>";
}

【问题讨论】:

  • 您的网址无法访问(有时)
  • 您是指 RSS URL (nu.nl) 吗?它应该工作。然而,这对我的问题并不重要,任何 RSS URL 都应该这样做。
  • 当我测试时有时它会失败,无论如何,您可以在下面查看我的答案

标签: php xml rss simplexml


【解决方案1】:

您可以使用-&gt;getName 方法获取节点的名称。将它们全部推入一个数组中,然后使用array_count_values()

例子:

$url = 'http://www.nu.nl/feeds/rss/gezondheid.rss';
$xml = simplexml_load_file($url);
$tags = array();
foreach($xml->channel->item as $item) {
    $children = $item->children(); // get all children of each item tag
    foreach ($children as $node) {
        $tags[] = $node->getName(); // get the node name of each children
    }
}

$count = array_count_values($tags); // count the values
echo '<pre>';
print_r($count);

应该输出如下内容:

Array
(
    [title] => 10
    [link] => 10
    [guid] => 10
    [description] => 10
    [pubDate] => 10
    [category] => 10
    [enclosure] => 10
    [copyrightPhoto] => 10
    [related] => 6
)

【讨论】:

  • 这太棒了,正是我想要的,而且很容易理解。
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多