我希望在不知道实际标记名称的情况下从rss Feed中获取所有使用过的标记(在$ feed-> channel->项目中)。是的,也许这听起来很奇怪,让我解释一下。
示例
<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的示例脚本输出):
<title>
使用了2次<link>
使用了2次<description>
使用了2次<test>
使用了1次我该怎么做?当我已经知道标签名称时,我可以轻松地确定所有标签,但是如何计算它们而不知道<item>
中使用了哪些标签?
目前我的脚本只是加载Feed并循环显示项目:
<?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>";
}
答案 0 :(得分:1)
您可以使用->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
)