2017-10-07 9 views
1

J'utilise Guzzle pour faire une demande XML à une API externe dans le back-end.Comment analyser SimpleXMLElement dans php/Laravel 5?

C'est là que je crée le client Guzzle:

$client = new Client(); //GuzzleHttp\Client 

C'est là que je fais la demande:

$request = $client->request('GET', 'This is where I put the URL'); 

C'est là que je reçois la réponse Guzzle et essayer de l'analyser:

$xml = $request->getBody()->getContents(); 
$xml = new \SimpleXMLElement($xml); 
$xml = simplexml_load_string($xml); 

Si je fais ceci:

dd($xml); 

Je reçois ce en retour:

SimpleXMLElement {#240 ▼ 
    +"StatusCode": "1" 
    +"StatusDescription": "Duplicated request" 
    +"MerchantId": "***" 
    +"Company": "***" 
    +"CompanyCity": "***" 
    +"CompanyPhone": "***" 
    +"CompanyDbaName": "***" 
    +"Balance": "99965" 
    +"TransDate": "2017-10-07" 
    +"TransTime": "06:58:48" 
    +"ProductVer": "***" 
    +"PromoVer": object 
    +"SoftVer": object 
    +"InvoiceNumber": object 
} 

Mon problème est que je ne sais pas comment analyser cela. Je veux obtenir le 1 en StatusCode.

Si je fais ceci:

dd($xml->StatusCode); 

Je reçois ceci:

SimpleXMLElement {#242 ▼ 
    +0: "1" 
} 

Comment puis-je obtenir juste 1?

+1

'$ xml-> StatusCode' est encore un objet. Vous pouvez le convertir en chaîne de plusieurs façons, par exemple simplement 'echo $ xml-> StatusCode'. – ishegg

+0

Merci, cela a fonctionné. – Seio

+0

J'ai soumis une réponse avec plus de détails. – ishegg

Répondre

0

La sortie var_dump() est correcte. $xml->StatusCode est une instance SimpleXMLElement. Ceci est bien sûr nécessaire au cas où vous devez, par exemple, ajouter un élément enfant à elle:

$xml->StatusCode->addChild("test", "value"); 

Si $xml->StatusCode ne contenait que la valeur de l'élément plutôt que d'une instance de SimpleXMLElement, vous ne seriez pas en mesure faire des modifications sur le XML chargé.

Alors, ce que vous devez faire, est jeté la valeur de StatusCode à une chaîne. Il existe différentes façons de le faire:

var_dump($xml->StatusCode); // returns SimpleXMLElement instance 
var_dump((string)$xml->StatusCode); // explicitly 
var_dump($xml->StatusCode->__toString()); // explicitly, calling the magic function 
echo $xml->StatusCode; // implicitly 

Some demos