【问题标题】:Count PHP/XML getElementsByTagName计数 PHP/XML getElementsByTagName
【发布时间】:2016-08-10 14:31:52
【问题描述】:

我有一个脚本,它用 PHP 解析一个 RSS-Feed 网址来制作一个代码。

$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-&gt;getElementsByTagName('item')

动态循环变量?

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

【问题讨论】:

标签: php xml rss


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    然后循环被调用:

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

    我必须减去 2 个元素(1x 用于频道标题,我认为 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>");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多