Php 避免xpath在xml中找不到命名空间时出错

Php 避免xpath在xml中找不到命名空间时出错,php,xml,namespaces,xml-namespaces,xpath,Php,Xml,Namespaces,Xml Namespaces,Xpath,有人能告诉我如何避免这些错误吗? 测试名称空间是否存在 当我想向数组中添加地理信息时,它就会启动 我认为这样做就足够了 (来自picasa api提要) foreach($feed->xpath('//gml:pos')作为$pos) { $feed_arr['geo'][$i]['pos']=(字符串)$pos[0]; $i++; } 警告:SimpleXMLElement::xpath()[]:第390行/home/woonbel/public_html/tsa.nl/applicate/l

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

当我想向数组中添加地理信息时,它就会启动 我认为这样做就足够了

(来自picasa api提要)

foreach($feed->xpath('//gml:pos')作为$pos)
{
$feed_arr['geo'][$i]['pos']=(字符串)$pos[0];
$i++;
}
警告:SimpleXMLElement::xpath()[]:第390行/home/woonbel/public_html/tsa.nl/applicate/lib/gpicasa.class.php中未定义名称空间前缀

警告:SimpleXMLElement::xpath()[]:xmlXpathVal:在第390行的/home/woonbel/public_html/tsa.nl/applicate/lib/gpicasa.class.php中计算失败

警告:第390行/home/woonbel/public_html/tsa.nl/applicate/lib/gpicasa.class.php中为foreach()提供的参数无效

注意,Richard不在
$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参数的警告输出。

使用strpos,或者您是否有更好的SuggestionRM,您的意思是您只是在应用您无法控制的随机XPath?如果是这样的话:捕捉错误而不返回任何内容是你唯一的希望,如果不是这样的话:在整个过程中添加一个前提条件
If(){}
。我不明白。你说,用getDocNa测试..()。这将返回多个ns。然后我说,使用strpos()找出结果中是否包含gml名称空间,然后你说我随机做事?需要更多解释。我的意思是,通常你有或多或少的硬编码XPath,你不需要任何字符串解析,你已经知道下一个XPath依赖于什么,你可以检查是否存在正确的数组键。对不起,我的回答有点晚了,我使用简单的xml来获得我想要的,atom字段在getDocSpaces()中不可见-我以为我读过php文档!xpath将是我需要更多实践的东西,在这种情况下,我找不到正确的方法?您的解决方案为三个foto提供了两个结果,但无法将它们与正确的foto关联?(那些确实有地理数据的)你能发布XML吗?您是生成XML还是从外部获取XML?我只是使用simplexml检索信息,现在忘记了xpath。@Hackstack,有时名称空间元素存在,有时不在(atom/XML)提要中。

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