#php #xml #simplexml
Вопрос:
Итак, вот мой вопрос, и мне нужна помощь.
вот мой вывод массива
[TransactionDetails] => stdClass Object
(
[TransactionId] => 60089978
[TransactionDate] => 2021-10-20T12:43:24.413
[Product] => stdClass Object
(
[@attributes] => stdClass Object
(
[name] => IdentiFraud Consumer
[version] => 2.2.0
)
)
Это то, что я использую, чтобы вызвать его из xml-ответа…
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
// Debug output of the response
libxml_use_internal_errors(TRUE);
$objXmlDocument = simplexml_load_string($response);
if ($objXmlDocument === FALSE) {
echo "There were errors parsing the XML file.n";
foreach(libxml_get_errors() as $error) {
echo $error->message;
}
exit;
}
$objJsonDocument = json_encode($objXmlDocument);
$arrOutput = json_decode($objJsonDocument);
Я пытался….
$arrOutput['TransactionDetails']['TransactionID']
$arrOutput['TransactionDetails']->TransactionID
И о каждой итерации там.
Я пробовал использовать Json_decode как true, так и false без радости….
Пожалуйста, помогите, что я делаю не так ?
Ответ №1:
- Удалите строки с помощью
json_encode
иjson_decode
- Прочитайте примеры SimpleXML в руководстве по PHP
- Не смотрите на
var_dump
выходные данные, посмотрите на фактический XML ($response
) - Получите доступ к нужным вам данным напрямую на
$objXmlDocument
основе того, что содержится в этом XML
Например, если $response
выглядит так:
<TransactionDetails>
<TransactionId>60089978</TransactionId>
</TransactionDetails>
Затем $objXmlDocument
представляет <TransactionDetails>
тег, и чтобы получить значение в <TransactionId>
теге, вы должны написать следующее:
echo $objXmlDocument->TransactionId;
Комментарии:
1. Я взгляну на руководство, Спасибо За Вашу помощь
2. итак, то, что, наконец, сработало для меня, было « $arrOutput->Транзакционные данные->>Транзакционный идентификатор«
3. @matthewparisi Основываясь на этом имени переменной, похоже, что вы все еще используете строки json_encode и json_decode. Пожалуйста, не надо, я обещаю, что тебе будет лучше без них.
4. @matthewparisi Попробуйте использовать
$objXmlDocument->TransactionDetails->TransactionId
вместо этого