2012-09-13 36 views
0

四處張望,難倒了。基本上我試圖過濾掉一個XML feed的結果,並將其隱藏在HTML輸出中顯示。我試圖找出場地「Hornblower遊輪和事件」,如果它存在,隱藏整個,這是所有節點的父母。使用SimpleXML過濾出物品

這裏的網址: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> 

幫助?

回答

0

使用有鎖的foreach

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

再未設置與使用未設置關鍵

unset($myfeed->$key); 

或取消只是場地整個當前XML($ myfeed - > $鍵 - >場地) ;

或者,您可以建立一個新的obj,而不是嘗試編輯現有的obj。在你的循環之前實例化一個新的對象,然後只添加它想要保留的部分。

或者,如果您發現不需要的場地,則可以繼續使用該foreach。唯一的缺點是您不會在$ myfeed中擁有您的ok'd列表副本。所以......

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

不工作:(我還沒有做正確的事。 感謝@M_user 我寫的後續荷蘭國際集團,但它返回我要刪除的項目,爲7個項目列表的一部分(循環詢問20)在以下接近 '如果($ venue_name ==( '霍恩布洛爾遊輪及活動')){'' 未設置($ myfeed - > $鍵);'' }?' – iosSicilian

+0

謝謝@M_user的幫助! – iosSicilian

0

首先,您應該將從SimpleXML對象獲取的每個對象都轉換爲相關類型。例如,你應該閱讀前場投用將(string)字符串屬性或節點:

$venue_name = (string)$goldstar->venue->name 

你對過濾的問題,我建議你自己的方式繼續尋找匹配的字符串,然後決定添加或不。

編輯

你想看看場地名稱是'Hornblower Cruises and Events'則取消設置當前事件現場和回聲它作爲XML?首先,你應該寫unset($myfeed),因爲它是事件字段本身。如果您未設置$myfeed,則下一個asxml將不會返回任何內容。你的代碼中有錯誤HTML。在你for的每一個循環,你寫的:

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

您應該for前放置。他們沒有結束標籤。將結束標記放在for之後。如果只想獲得場地名稱爲'Hornblower Cruises and Events'的字段,則在<div class="gs-item">之前放置<?php if($venue_name != 'Hornblower Cruises and Events') : ?>,並在</ul>之後放置<?php endif; ?>

+0

謝謝@MahanGM,我有點一個小白,所以將這項工作? 我鑄造的所有項目,然後我寫道: '如果($ venue_name ==( '霍恩布洛爾遊輪及活動')){' \t'未設置($ myfeed->事件);' \t \t'回聲$ myfeed-> asxml();' '}' – iosSicilian

+0

它似乎是返回7項,而不是20我設置循環,並仍然顯示我想隱藏 – iosSicilian

+0

謝謝,謝謝,謝謝@MahanGM,它的工作!我甚至不必使用'unset();' 感謝您指出''錯誤。我錯過了這麼專注於過濾器。 – iosSicilian