2014-09-27 64 views
0

我試圖從CDATA獲取值在<b></b>之內的值。與simpleXML,但迄今沒有任何好的結果。這裏是我的xml文件的某一部分 -simpleXML從CDATA獲取值

<item> 
<title> 
<![CDATA[ 
Bez starpniekiem tiek izīrēts pilnībā mēbelēts 1-istabu dzīvoklis 5. stāvā uz ilgu laiku. Dzīvoklis mēbelēts, ar iebūvētu vir ... 
]]> 
</title> 
<link> 
http://www.ss.lv/msg/lv/real-estate/flats/riga/centre/abhkp.html 
</link> 
<pubDate>Thu, 25 Sep 2014 02:59:55 +0300</pubDate> 
<description> 
<![CDATA[ 
<a href="http://www.ss.lv/msg/lv/real-estate/flats/riga/centre/abhkp.html"><img align=right border=0 src="http://i.ss.lv/images/2014-09-24/348773/VHkBG09gR1s=/1.t.jpg" width="160" height="120" alt=""></a> 
District: <b><b>centrs</b></b><br/>Street: <b><b>Klijānu 2</b></b><br/>Rooms: <b><b>1</b></b><br/>m2: <b><b>35.00</b></b><br/>Type: <b><b>Renov.</b></b><br/>: <b><b>8.57</b> €</b><br/>Price: <b><b>300</b> €/mēn.</b><br/><br/><b><a href="http://www.ss.lv/msg/lv/real-estate/flats/riga/centre/abhkp.html">Apskatīt sludinājumu</a></b><br/><br/> 
]]> 
</description> 
</item> 

我知道如何從如標題,pudDate,鏈接此XML文件中獲取值,但我不知道我怎樣才能從數值說明標籤這樣我就可以將它們添加到按價格,區域,類型,圖像排序的數據庫中。

到目前爲止,我嘗試將描述標籤保存到字符串中,之後使用explode()剪出了我需要的信息的部分,我有正確的值,但它們帶有標籤。一些帶有標籤。

這就是我試圖 -

$url = "http://www.ss.lv/lv/real-estate/flats/riga/hand_over/rss/"; 

$result = simplexml_load_file($url); 

foreach ($result->channel->item as $item) { 
    $title =(string)$item->title; 
    description = (string)$item->description; 
    $link = $item->link; 
    $pubDate = $item->pubDate; 

// Cut out from description price 
    $parts = explode("Price: ", $description); 
    $pri= ""; 
    for ($i = 1; $i < 2; $i++) { 
     $pri= $parts[$i]; 
    } 
    $parts2 = explode("</b>", $pri); 
    for ($i = 1; $i < 2; $i++) { 
     $price= $parts2[0]; 
    } 

,但我認爲我的解決方案是absoloutly錯誤和切割的結果是 - <b><b>300 or <b>650

所以我的問題是:我怎麼能得到乾淨的值了的我的CDATA使用類似的東西

$pubDate = $item->pubDate 

使用類似的東西?

$description = (string)$item->description->b[0] - 從CDATA獲得正確的值。

回答

1

在你simplexml_load_file(),你需要添加參數LIBXML_NOCDATA標誌:

$url = "http://www.ss.lv/lv/real-estate/flats/riga/hand_over/rss/"; 
$result = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA); 
                 // ^^ here 
foreach($result->channel->item as $item) { 
    $title = (string) $item->title; 
    $desc = (string) $item->description; 
    $dom = new DOMDocument($desc); 
    $dom->loadHTML($desc); 
    $bold_tags = $dom->getElementsByTagName('b'); 
    foreach($bold_tags as $b) { 
     echo $b->nodeValue . '<br/>'; 
    } 
} 
+0

感謝。它的工作原理,但在第一次循環後,我得到了每個下一個值x2。但是,如果我將值保存到數據庫中,我可以簡單地運行數據庫檢查,如果數據已經存在,那麼如果它們存在,那麼不要寫它們,對吧? – Santar 2014-09-27 12:16:21

+0

@Santar當然你可以做到這一點,如果有一些重複,但我認爲太多的開銷,你也可以把它們放在一個數組中,然後在內部循環結束後使用'array_unique ()'這樣你就不必每次都去檢查數據庫了,那更好一點 – Ghost 2014-09-27 12:40:51

+0

我能問你最後一個問題嗎?我如何才能從$ b獲得價格?當我寫回聲'$ b-> nodeValue-> item(2)'或'$ b-> item(2) - > nodeValue'時,我不能使用'item(x)',bur – Santar 2014-09-30 23:07:27