Разбор PHP XML CDATA

У меня проблема с запросом веб-службы (погода Yahoo). Благодаря этому классному форуму я нашел следующие подсказка. Тем не менее, я не могу получить свою стоимость.

Я извлекаю часть CDATA с помощью

$conditionIcon = $weatherXmlObject->xpath("//item/description");
$dom = new DOMDocument();
$dom->loadHTML($conditionIcon); // or you can use loadXML
$xml = simplexml_import_dom($dom);
$imgSrc = (string)$xml->body->img['src'];
echo $imgSrc;

$ imgSrc всегда пуст.

Описание выглядит так

<description><![CDATA[
<img src="http://l.yimg.com/a/i/us/we/52/28.gif"/><br />
<b>Current Conditions:</b><br />
Mostly Cloudy, 50 F<BR />
<BR /><b>Forecast:</b><BR />
Fri - Partly Cloudy. High: 62 Low: 49<br />
Sat - Partly Cloudy. High: 65 Low: 49<br />
<br />
<a    href="http://us.rd.yahoo.com/dailynews/rss/weather/Sunnyvale__CA/*http://weather.yahoo.com/forecast/USCA1116_f.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
(provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
]]></description>

person AntonSack    schedule 02.10.2013    source источник


Ответы (2)


Проблема в том, что парсер игнорирует все данные в блоке CDATA. Вы должны загрузить тело описания в другой DOMDocument.

person Community    schedule 04.10.2013
comment
вы имеете в виду $ conditionIcon = $ weatherXmlObject- ›xpath (// item / description); $ dom = новый DOMDocument (); $ dom- ›loadHTML ($ conditionIcon); $ xml = simplexml_import_dom ($ dom); $ newDoc = новый DOMDocument (); $ newDoc- ›loadHTML ((строка) $ xml-› body); $ newXml = simplexml_import_dom ($ newDoc); $ imgSrc = (строка) $ newXml- ›img ['src']; echo $ imgSrc; - person AntonSack; 04.10.2013

Хорошо, я решил проблему, но с помощью регулярного выражения (благодаря этому page, где тоже обсуждалась проблема):

// retrieve link to condition image - in description element
$xml = simplexml_load_string($weather_feed, 'SimpleXMLElement', LIBXML_NOCDATA); 
$description = $xml->channel->item->description;
//preg match regular expression to extract weather icon
$imgpattern = '/src="(.*?)"/i';
preg_match($imgpattern, $description, $matches);
$aExport['img_url'] = $matches[1];

Ваше здоровье

person AntonSack    schedule 04.10.2013