Избежать ошибки, когда xpath не находит пространство имен в xml
Может кто-нибудь сказать мне, как избежать этих ошибок? Тестирование на наличие пространства имен?
Это начинается, когда я хочу добавить гео-информацию в массив, я думал, что этого было достаточно для этого.
(из ленты Picasa API)
foreach($feed->xpath('//gml:pos') as $pos)
{
$feed_arr['geo'][$i]['pos'] = (string)$pos[0];
$i++;
}
<b>Warning</b>: SimpleXMLElement::xpath() [<a href='/phpmanual/simplexmlelement.xpath'>simplexmlelement.xpath</a>]: Undefined namespace prefix in <b>/home/woonbel/public_html/tsa.nl/applicatie/lib/gpicasa.class.php</b> on line <b>390</b><br />
<br />
<b>Warning</b>: SimpleXMLElement::xpath() [<a href='/phpmanual/simplexmlelement.xpath'>simplexmlelement.xpath</a>]: xmlXPathEval: evaluation failed in <b>/home/woonbel/public_html/tsa.nl/applicatie/lib/gpicasa.class.php</b> on line <b>390</b><br />
<br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>/home/woonbel/public_html/tsa.nl/applicatie/lib/gpicasa.class.php</b> on line <b>390</b><br />
С уважением, Ричард
2 ответа
Просто не запрашивайте его, когда его нет $element->getDocNamespaces();
Это чистое решение, опубликованное Wrikken, но вы можете попробовать это
foreach( (($tmp = @$feed->xpath('//gml:pos')) ? $tmp : array()) as $pos ) {
// body
}
$xml->xpath вызывается с '@' для подавления сообщений об ошибках (первые два предупреждения о xpath), результат присваивается $ tmp. Затем выполняется условный оператор. $xml->xpath(...)? $tmp: array() вернет $tmp (результат запроса xpath), если он содержит допустимые данные, в противном случае он вернет пустой массив. Это позволит избежать вывода предупреждения для неверного аргумента foreach.