Вывод массива вопросов для многомерного массива

#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:

  1. Удалите строки с помощью json_encode и json_decode
  2. Прочитайте примеры SimpleXML в руководстве по PHP
  3. Не смотрите на var_dump выходные данные, посмотрите на фактический XML ( $response )
  4. Получите доступ к нужным вам данным напрямую на $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 вместо этого