0

一直在环顾四周,我很难过。基本上,我试图从 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 &raquo;</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>

帮助?

4

2 回答 2

0

首先,您应该将从 SimpleXML 对象中获取的每个对象转换为相关类型。例如,您应该(string)在读取字段之前使用 put 转换字符串属性或节点:

$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') : ?>before<div class="gs-item">和 put <?php endif; ?>after </ul>

于 2012-09-13T20:01:02.170 回答
0

使用键控 foreach

 foreach ($myfeed as $key => $goldstar):

然后使用 key 取消设置整个当前 xml

unset($myfeed->$key);

或者用 unset($myfeed->$key->venue); 取消设置场地

或者,您可以只构建一个新的 obj 而不是尝试编辑现有的。在循环之前实例化一个新对象,然后只添加您想要保留的部分。

或者,如果您发现不需要的场地,您可以继续进行 foreach。唯一的缺点是您不会在 $myfeed 中获得 ok'd 列表的副本。所以...

if ($venue_name == 'Hornblower Cruises and Events') { continue; }
于 2012-09-13T20:06:38.430 回答