我试图从<b></b>
内的CDATA获取值。使用simpleXML,但到目前为止没有任何好的结果。这是我的xml文件的一部分 -
<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>
我知道如何从这个xml文件中获取值,例如title,pudDate,link,但我不知道如何从description标签中获取值,以便我可以将它们添加到按价格,区域,类型排序的数据库中,图片。
到目前为止,我尝试将描述标记保存到字符串中,然后使用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];
}
但我认为我的解决方案绝对错误,切割的结果是 - <b><b>300 or <b>650
所以我的问题是:如何使用与
类似的东西从CDATA中获取干净的值$pubDate = $item->pubDate
使用类似的东西?
$description = (string)$item->description->b[0]
- 从CDATA获取正确的值。
答案 0 :(得分:2)
在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/>';
}
}