избежать ошибки, когда xpath не находит пространство имен в XML - PullRequest
0 голосов
/ 17 сентября 2010

Может кто-нибудь сказать мне, как избежать этих ошибок? Тестирование на наличие пространства имен?

Запускается, когда я хочу добавить геоинформацию в массив Я думал, что этого достаточно, чтобы сделать это.

(из канала 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 ]

1 голос
/ 17 сентября 2010

Только не запрашивайте его, когда его нет в $element->getDocNamespaces();

0 голосов
/ 17 сентября 2010

Чистое решение опубликовано Wrikken, но вы можете попробовать это


foreach( (($tmp = @$feed->xpath('//gml:pos')) ? $tmp : array()) as $pos ) {
    // body
}

$ xml-> xpath вызывается с '@' для подавления сообщений об ошибках (первые два предупреждения о xpath)результат присваивается $ tmp.Затем выполняется условный оператор.$ xml-> xpath (...)?$ tmp: array () вернет $ tmp (результат запроса xpath), если он содержит допустимые данные, в противном случае он вернет пустой массив.Это позволит избежать вывода предупреждения для неверного аргумента foreach.

...