你接近,但兩件事情:
第一XML是無效的(看起來就像一些拼寫錯誤,因爲你沒有檢查你的示例代碼)。當你壓制這些錯誤時,你需要啓用錯誤日誌並跟蹤錯誤日誌。修復這些。
然後收拾你怎麼辦變量屬性訪問,(一)正確的代碼是:
echo "Value : " . $values->{$responseMapping};
典型的輸出由:
Value : ABCD
Value : DEFG
Value : HIJK
查看完整的工作代碼示例(run it as an online demo):
<?php
/**
* @link http://stackoverflow.com/a/24116883/367456
* @link https://eval.in/160030
*/
$xml = '
<RESPONSE type="WEBRESPONSE">
<NAME>ALBERT</NAME>
<HTTPSTATUS>200</HTTPSTATUS>
<VALUES>
<VALUE1>ABCD</VALUE1>
<VALUE2>DEFG</VALUE2>
<VALUE3>HIJK</VALUE3>
</VALUES>
</RESPONSE>';
$responseMappings = array(
"VALUE1", "VALUE2", "VALUE3"
);
$xmlResponse = simplexml_load_string($xml);
if (!$xmlResponse) {
throw new RuntimeException('Failed to open XML');
}
$values = $xmlResponse->VALUES;
foreach ($responseMappings as $responseMapping) {
//Refer using variable name below? How to?
echo "Value : " . $values->{$responseMapping}, "\n";
}
但是如果你讓我一些額外的想法:
想的不一樣:所有這三個<VALUE?>
元素對在平常的事:他們是<VALUES>
子元素。這樣做你將不需要保留元素名稱的數組。
用於該場景的示例性輸出:
Value "VALUE1": ABCD
Value "VALUE2": DEFG
Value "VALUE3": HIJK
這裏是另一個workign代碼示例(run it as an online demo):
<?php
/**
* @link http://stackoverflow.com/a/24116883/367456
* @link https://eval.in/160032
*/
$xml = '
<RESPONSE type="WEBRESPONSE">
<NAME>ALBERT</NAME>
<HTTPSTATUS>200</HTTPSTATUS>
<VALUES>
<VALUE1>ABCD</VALUE1>
<VALUE2>DEFG</VALUE2>
<VALUE3>HIJK</VALUE3>
</VALUES>
</RESPONSE>';
$xmlResponse = simplexml_load_string($xml);
if (!$xmlResponse) {
throw new RuntimeException('Failed to open XML');
}
/** @var SimpleXMLElement $values */
$values = $xmlResponse->VALUES;
foreach ($values->children() as $name => $value) {
//Refer using variable name below? How to?
printf("Value \"%s\": %s\n", $name, $value);
}