使用变量显示XML响应

时间:2019-04-30 07:12:06

标签: php xml

你能帮我吗?解析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;不起作用?

谢谢。

2 个答案:

答案 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文档中的元素。

$responseSimpleXMLElement的实例,您需要这样定义

$level1 = "ENDS";
$level2 = "E0";
$level3 = "ENDERECO";

现在您可以使用来获取值

$response->$level1->$level2->$level3;