你能帮我吗?解析XML时遇到一个奇怪的问题。
这是我的PHP脚本:
$xml = "https://pastebin.com/raw/30QHhFSr";
$response = new SimpleXMLElement(file_get_contents($xml)) or die('error');
$auto = "ENDS->E0->ENDERECO";
echo $response->$auto; //output: nothing
echo $response->ENDS->E0->ENDERECO; //output: SAO SEVERINO //works
为什么$response->$auto;
不起作用?
谢谢。
答案 0 :(得分:1)
由于箭头符号实际上是一个字符串文字,因此正确无误,当您执行此操作时,它本身不会执行任何操作:
$auto = "ENDS->E0->ENDERECO";
echo $response->$auto;
echo $response->{"ENDS->E0->ENDERECO"}; // it doesn't really exist
另一种选择是,您可以使用explode
处理字符串并将其分解,然后使用array reduce。
这是主意:
$xml = 'https://pastebin.com/raw/30QHhFSr';
$response = new SimpleXMLElement(file_get_contents($xml)) or die('error');
$auto = 'ENDS->E0->ENDERECO';
echo array_reduce(explode('->', $auto), function ($o, $p) {
return $o->$p;
}, $response);
答案 1 :(得分:0)
-> ,当您要在实例上调用方法或访问实例属性时使用
SimpleXMLElement -表示XML文档中的元素。
$response
是SimpleXMLElement
的实例,您需要这样定义
$level1 = "ENDS";
$level2 = "E0";
$level3 = "ENDERECO";
现在您可以使用来获取值
$response->$level1->$level2->$level3;