我正在使用XML产品列表,该列表显示大约20种产品的列表,并且在每个<item>
内,每个产品都有一个<description>
,然后一个<bullet>
。这是一个例子:
我使用带有SimpleXML的foreach
循环来提取产品数据,并且<image>
和<title>
等所有单个标记都正常运行。
我的问题是它只解析每个产品的第一个<bullet>
而不是所有产品。为了解决这个问题,我尝试添加一个for
循环,该循环定位<description>
标记内的所有嵌套项,然后输出很多。 但是现在它给了我XML文件中第一个项目的第一个<bullet>
并将其放在每个产品下,而不是为每个产品显示多个项目符号,这就是我想要的。
我会发布我的剧本,希望有人能够指出我出错的地方。
<?php
$items = simplexml_load_file('http://www.itclear.com/BestSellers.xml');
foreach ($items->channel->item as $item):
$title=$item->title;
$image=$item->image;
$price=$item->price;
$description=$item->description;
$link=$item->link;
echo '
<div class="xsmall-12 medium-6 large-4 columns product">
<div class="inner">
<div class="product-image">
<img class="product-image" src="',$image,'"/>
</div>
<h2 class="product-title"><strong>',$title,'</strong></h2>
<ul>';
$bullets = $items->channel->item->description;
for($i=0;$i<=$bullets;$i++){
echo '<li>',$bullets[$i]->bullet,'</li>';
}
echo'
</ul><span class="product-price">£',$price,'</span>
<a class="product-link" href="',$link,'" target="_blank" title="Visit ITC Sales to buy ',$title,'">View Deal <i class="fa fa-angle-right" aria-hidden="true"></i></a>
</div>
</div>';
endforeach;
&GT;
答案 0 :(得分:1)
你的问题在于这一行:
$bullets = $items->channel->item->description;
此行未提及您在外部foreach
循环中循环的元素,因此无法知道您要查看哪个item
。它只是说&#34;查看文档中的第一个<channel>
,然后查看其中的第一个<item>
,然后查看其中的<description>
元素&#34;。< / p>
您想要的是使用循环中定义的$item
变量,并查看<description>
元素那里:
$bullets = $item->description;
但是这个变量名称并不完全正确 - $bullets
变量现在包含一个或多个<description>
元素,而不包含其下的<bullet>
元素。所以我们应该说:
$description = $item->description;
$bullets = $description->bullet;
请注意,我们现在不需要$bullets[$i]->bullet
,因为$bullets[$i]
应该已经是<bullet>
元素;你还需要count()
你的代码中缺少的项目符号。所以我们有:
for($i=0;$i<=count($bullets);$i++){
echo '<li>',$bullets[$i],'</li>';
}
为简化这一切,您可以使用文件顶部已有的foreach
循环样式:
foreach ( $item->description->bullet as $bullet ) {
echo '<li>',$bullet,'</li>';
}
答案 1 :(得分:0)
我还为那些也遇到类似问题的人找到了另一种解决方案。这是代码:
<?php
$xml = 'http://www.itclear.com/BestSellers.xml';
$items = simplexml_load_file($xml);
foreach ($items->channel->item as $item) {
$title = $item->title;
$image=$item->image;
$price=$item->price;
$description=$item->description;
$link=$item->link;
echo '
<div class="xsmall-12 medium-6 large-4 columns product">
<div class="inner">
<div class="product-image">
<img class="product-image" src="',$image,'"/>
</div>
<h2 class="product-title"><strong>',$title,'</strong></h2>
<ul class="product-description">';
foreach ($item->description->bullet as $bullet) {
echo '<li>';
$b = $bullet;
echo $b;
echo "</li>";
}
echo'
</ul><span class="product-price">£',$price,'</span>
<a class="product-link" href="',$link,'" target="_blank" title="Visit ITC Sales to buy ',$title,'">View Deal <i class="fa fa-angle-right" aria-hidden="true"></i></a>
</div>
</div>';
}
?>