当xpath在xml中找不到命名空间时避免错误

时间:2010-09-17 16:40:01

标签: php xml namespaces xml-namespaces xpath

有人能告诉我如何避免这些错误吗? 测试是否存在命名空间?

当我想向数组添加地理信息时,它就开始了 我认为这样就足够了。

(来自picasa api Feed)

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 个答案:

答案 0 :(得分:1)

当它不在$element->getDocNamespaces();

时,不要查询它

答案 1 :(得分:0)

干净的解决方案是Wrikken发布的解决方案,但你可以试试这个


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

$ xml-&gt;使用'@'调用xpath来抑制错误消息(前两个关于xpath的警告),结果被分配给$ tmp。然后评估条件语句。 $ xml-&gt; xpath(...)? $ tmp:array()将返回$ tmp(xpath查询的结果),如果它包含有效数据,否则它将返回一个空数组。这将避免无效的foreach参数的警告输出。