计算PHP / XML getElementsByTagName

时间:2016-08-10 14:31:53

标签: php xml rss

我有一个脚本,用PHP解析RSS-Feed Url以制作代码。

$xml=("http://www.herecomesthedomain.com/andyourrssfeed.rss");
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;

//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');

for ($i=0; $i<=9; $i++) {
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;
  echo ('< li >' . $item_title . '</ li >');
}

但循环包含固定数字(9)。

是否有可能计算     $x=$xmlDoc->getElementsByTagName('item')

变量动态循环?

我尝试了不同的解决方案,但它不起作用。

2 个答案:

答案 0 :(得分:0)

您可以使用$x->length查询DOMNodeList的长度,但最简单的方法可能是使用foreach循环:

foreach ($x as $item) {
    $item_title = $item->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
    echo ('< li >' . $item_title . '</ li >');
}

答案 1 :(得分:0)

哦,我在你的帮助下得到了它:

$count = ($xmlDoc->getElementsByTagName('title')->length)-2;

并调用循环:

for ($i=0; $i<=$count; $i++) 

我必须减去2个元素(1x用于频道标题,我认为一个用于数组起始编号(0而不是1)。现在它可以工作。

完整代码:

$xml=("http://www.herecomesthedomain.com/andyourrssfeed.rss");
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)
->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;

// Count the title-"<item>"-elements
$count= ($xmlDoc->getElementsByTagName('title')->length)-2;

//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');

for ($i=0; $i<=$anzahl; $i++) {
$item_title=$x->item($i)->getElementsByTagName('title')->item(0)
->childNodes->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')->item(0)
->childNodes->item(0)->nodeValue;
echo ("<li>" . $item_title . "</li>");
}