2013-10-02 7 views
0

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

Я извлекая 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> 

ответ

0

ОК, я решил эту проблему, но с использованием регулярных выражений (благодаря этому 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]; 

Приветствия

1

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

+0

вы имеете в виду $ conditionIcon = $ weatherXmlObject- > XPath ("// пункт/описание"); $ dom = new 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; – AntonSack

 Смежные вопросы

  • Нет связанных вопросов^_^