2010-09-17 31 views
0

有人能告诉我如何避免这些错误吗? 测试命名空间的存在吗?当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 /> 

问候,理查德

回答

1

只是不查询它时,它是不是在$element->getDocNamespaces();

+0

使用strpos或者你有更好的建议 – Richard 2010-09-17 17:08:41

+0

呃,你的意思是你只是在你的控制之外应用随机XPath?如果是这样的话:捕捉错误并返回任何内容都是唯一的希望,如果不是的话:只要在整个事情上添加一个前提条件'if(){}'。 – Wrikken 2010-09-17 17:16:50

+0

我不明白。你说,用getDocNa ..()进行测试。这将返回多个ns。然后我说,找出gml命名空间是否包含在使用strpos()的结果中,然后你说我会随机做些事情?需要更多解释。 – Richard 2010-09-17 17:20:41

0

干净的解决方案是一个贴通过Wrikken,但你可以试试这个


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

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

+0

我有一个问题发现至极入口有一个名称空间,而不是?您的解决方案为我提供了三张照片的两个结果,但没有办法将它们与正确的照片相关联? (实际上有地理数据的人) – Richard 2010-09-17 19:51:59

+0

您可以发布XML吗?您是生成XML还是从外部获取? – hacksteak25 2010-09-17 21:45:12

+0

我只是使用simplexml来获取信息,并忘记了xpath。@ Hackstack,有时名称空间元素存在,有时它不在(atom/xml)feed中。 – Richard 2010-09-29 13:01:40

相关问题