Избежать ошибки, когда 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.

Другие вопросы по тегам