环顾四周,我很难过。基本上我正在尝试从xml提要中过滤掉结果并将其隐藏在html输出中显示。我正试图找到“Hornblower Cruises and Events”的场地,如果它存在,则隐藏整个节点,它是所有节点的父节点。
以下是网址:http://www.sandiegomagazine.com/goldstartest/rss3-exclude.php
这是我的代码:
<?php
$myfeed = simplexml_load_file('https://www.goldstar.com/api/listings.xml?api_key=6d0d598c69dfecfcf028b0d2b3c9b693b606ad8c&postal_code=92101');
$i = 0;
foreach ($myfeed as $goldstar):
$title=$goldstar->headline_as_html;
$summary=$goldstar->summary_as_html;
$dates=$goldstar->upcoming_dates->event_date->date;
$ourprice=$goldstar->our_price_range;
$fullprice=$goldstar->full_price_range;
$img=$goldstar->image;
$link=$goldstar->link;
$venue_name=$goldstar->venue->name;
$venue_street=$goldstar->venue->address->street_address;
$venue_locality=$goldstar->venue->address->locality;
$venue_region=$goldstar->venue->address->region;
$venue_zip=$goldstar->venue->address->postal_code;
$venue_phone=$goldstar->venue->phone;
$category=$goldstar->category_list->category->name;
// if ($venue_name == 'Hornblower Cruises and Events'){
// unset($myfeed->event);
//echo $myfeed->asxml();
//}
if (++$i > 20) {
// stop after 10 loops
break;
}
?>
<html>
<head></head>
<body>
<div class="gs-item">
<div class="gs-itemcontent">
<h3 class="gs-cat"><?php echo $category; ?></h3>
<h2><a href="<?php echo $link; ?>" target="_blank"><?php echo $title; ?></a></h2>
<h4 class="gs-date">Date: <?php echo $dates; ?> <br/>For more show dates, <a href="<?php echo $link; ?>" target="_blank">click here</a></h4>
<img src="<?php echo $img; ?>" />
<p><?php echo $summary; ?></p>
<div id="gs-callout">
<span class="fullprice">Full Price: <?php echo $fullprice; ?></span>
<br/>
<span class="ourprice">Our Price: <span class="gs-hilite"><?php echo $ourprice; ?></span></span>
<p><a class="gs-button" href="<?php echo $link; ?>" target="_blank">Buy Tickets »</a></p>
</div>
<ul class="gs-venue">
<li><strong><?php echo $venue_name; ?></strong> | </li>
<li><?php echo $venue_street; ?></li>
<li><?php echo $venue_locality; ?>, <?php echo $venue_region; ?> <?php echo $venue_zip; ?></li>
<li><?php echo $venue_phone; ?></li>
</ul>
</div>
<div class="gs-clear"></div>
</div>
<? endforeach; ?>
</body>
帮助?
答案 0 :(得分:0)
首先,您应该将从SimpleXML对象获取的每个对象强制转换为相关类型。例如,在阅读字段之前,您应该使用(string)
来转换字符串属性或节点:
$venue_name = (string)$goldstar->venue->name
关于过滤的问题,我建议您自己继续寻找匹配字符串,然后决定是否添加。
修改强>
您正在尝试查看地点名称是否为'Hornblower Cruises and Events'
,然后取消设置当前事件字段并将其作为XML回显?首先你应该写unset($myfeed)
,因为它是事件字段本身。如果您取消设置asxml
,则下一个$myfeed
将不返回任何内容。您的代码中出现HTML
错误。在for
的每个循环中,您都在撰写:
<html>
<head></head>
<body>
您应该将它们放在for
之前。而且他们没有结束标签。将结束标记放在for
之后。如果您只想获取地址不是'Hornblower Cruises and Events'
的字段,请将<?php if($venue_name != 'Hornblower Cruises and Events') : ?>
放在<div class="gs-item">
之前,然后将<?php endif; ?>
放在</ul>
之后。
答案 1 :(得分:0)
使用键控的foreach
foreach ($myfeed as $key => $goldstar):
然后使用密钥
取消设置整个当前的xmlunset($myfeed->$key);
或者取消设置场地($ myfeed-&gt; $ key-&gt;场地);
或者,您可以构建一个新的obj,而不是尝试编辑现有的obj。在循环之前实例化一个新对象,然后只添加要保留的部分。
或者,如果您发现不需要的场地,您可以继续前进。唯一的缺点是你不会在$ myfeed中找到ok'd列表的副本。所以......
if ($venue_name == 'Hornblower Cruises and Events') { continue; }