我正在使用带有SimpleXML的PHP脚本来解析XML提要。我无法控制XML的内容。
try { $xml = @new SimpleXMLElement($fetchResult); } catch (Exception $e) { errorHandle($e->getMessage());}
$userNick = $xml->View->ScrollView->VBoxView->View->MatrixView->VBoxView[0]->HBoxView->TextView->SetFontStyle->b;
foreach ($xml->View->ScrollView->VBoxView->View->MatrixView->VBoxView[0]->VBoxView as $pathToSubTree){
foreach ($pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView as $canopy){
//Do some stuff now that we've found the canopy of the tree
}
$canopy = $pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView;
if(is_null($canopy)){
//Do some stuff stuff is the canopy was not traceable
}
}
$pathToSubTree = $xml->View->ScrollView->VBoxView->View->MatrixView->VBoxView[0]->VBoxView;
if(is_null($pathToSubTree)){
//Do some stuff stuff is the subTree path was not traceable
}
unset($xml);
我遇到了很多错误,我确信这些错误与同样的原因有关:
PHP Notice: Trying to get property of non-object in myScript.php on line 45
PHP Warning: Invalid argument supplied for foreach() in myScript.php on line 45
PHP Notice: Trying to get property of non-object in myScript.php on line 76
第45行(来自上方):
foreach ($pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView as $canopy){
第76行(来自上方):
$canopy = $pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView;
我很确定这个错误是由我的路径中的一个数组不是特定XML的数组引起的,但有时它可能是一个数组。
处理这些问题的正确方法是什么?
答案 0 :(得分:1)
可以多次出现或单独出现:
is_array($doc->node) ? $doc->node[0] : $doc->node
或者它可能更容易使用:
$node->xpath('MatrixView/View/XBoxView/VBoxView/HBoxView[1]/VBoxView/MatrixView/VBoxView)
[1]是匹配的第一个元素
答案 1 :(得分:1)
以下是对这些错误消息的解释:
PHP Warning: Invalid argument supplied for foreach() in myScript.php on line 45
这个很容易。您已经传递了一些无法迭代到foreach的内容,例如foreach (false as $x)
。
在你的情况下,你疯狂的$ foo-> bar-> baz系列可能会返回null,因为该元素不存在。
PHP Notice: Trying to get property of non-object in myScript.php on line 45
“试图获取属性”你肯定知道对象的属性“bar”被写为->bar
,“非对象”是指->
之前的变量。这意味着在$xml->View->ScrollView->...
中的某个地方存在一个不存在的元素,SimpleXML返回null
。因此,下一个->
会触发该错误。
简而言之,你对元素的“路径”是错误的。