Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用变量显示XML响应_Php_Xml - Fatal编程技术网

Php 使用变量显示XML响应

Php 使用变量显示XML响应,php,xml,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 $respons

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


谢谢。

得到的是正确的,因为箭头符号实际上是一个字符串文字,当您执行以下操作时,它本身不起任何作用:

$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);
->用于在实例上调用方法或访问实例属性

-表示XML文档中的元素

$response
simplexmlement
的一个实例,您需要这样定义

$level1 = "ENDS";
$level2 = "E0";
$level3 = "ENDERECO";
现在,您可以使用

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

你不能自动做你想做的事,你必须分解
$auto
并逐级执行。我该怎么做?奇怪的问题?不,它只是你的箭头符号实际上是一个字符串文字,这就是为什么没有输出你不能用字符串变量pass作为对象键来获取值,所以必须遵循以下过程:[$response->ENDS->E0->ENDERECO]顺便说一句,这里有一把小提琴