Php 使用SimpleXML筛选出项目

Php 使用SimpleXML筛选出项目,php,xml,Php,Xml,我一直在四处张望,被难住了。基本上,我试图从xml提要中过滤出一个结果,并将其隐藏在html输出中。我试图找出“Hornblower巡游和活动”的地点,如果它存在,隐藏整个地点,这是所有节点的父节点 以下是网址: 这是我的密码: <?php $myfeed = simplexml_load_file('https://www.goldstar.com/api/listings.xml?api_key=6d0d598c69dfecfcf028b0d2b3c9b693b606ad8c&

我一直在四处张望,被难住了。基本上,我试图从xml提要中过滤出一个结果,并将其隐藏在html输出中。我试图找出“Hornblower巡游和活动”的地点,如果它存在,隐藏整个地点,这是所有节点的父节点

以下是网址:

这是我的密码:

<?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>

日期:
如需了解更多展会日期, " />

全价:
我们的价格:

  • |
  • ,


帮助?

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

$venue_name = (string)$goldstar->venue->name
对于您关于筛选的问题,我建议您自己继续查找匹配字符串,然后决定是否添加

编辑

您试图查看场馆名称是否为“Hornblower巡游和活动”,然后取消设置当前活动字段并将其作为XML进行回显?首先,您应该编写
取消设置($myfeed)
因为它是事件字段本身。如果您取消设置
$myfeed
,则下一步
asxml
将不返回任何内容。并且您的代码中有
HTML
错误。在
for
的每个循环中,您正在编写:

<html>
<head></head>
<body>

你应该把它们放在<代码>之前,因为<代码>没有结束标记。把结束标记放在<代码>之后,因为<代码>。如果你只想得到没有场馆名称的字段<代码>'Hornblower Cruises And Events',把
<代码>放在<代码><代码>之前,把
<代码><放在<代码><之后。
 foreach ($myfeed as $key => $goldstar):
然后使用键取消设置整个当前xml

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

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

或者,如果你发现了不需要的地点,你可以继续foreach。唯一的缺点是你不会在$myfeed中有一份确定列表。所以

if ($venue_name == 'Hornblower Cruises and Events') { continue; }

谢谢@MahanGM,我有点笨,这样行吗?我铸造了所有的项目,然后我写道:
if($vention_name==('Hornblower Cruises and Events'){
unset($myfeed->event);
echo$myfeed->asxml();
>
它似乎返回了7项,而不是我设置循环的20项,并且仍然显示了我想要隐藏的内容。谢谢,谢谢@MahanGM,它成功了!我甚至不必使用
unset();
谢谢你指出
错误。我错过了专注于过滤器的内容。不工作:(我仍然没有做正确的事情。感谢@m_user我写了下面的内容,但它返回了我想要删除的项目,作为7个项目列表的一部分(循环要求20个)。下面的内容更接近吗?
if($vention_name==('Hornblower Cruises and Events'){
unset($myfeed->$key);
`}`