2017-10-07 109 views
1

我使用Guzzle向後端的外部API發出XML請求。如何在php/Laravel 5中解析SimpleXMLElement?

這是我創建狂飲客戶端:

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

這是我提出的要求:

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

這是我得到的狂飲響應,並嘗試分析它:

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

如果我這樣做:

dd($xml); 

我收到此回報:

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 
} 

我的問題是,我不知道如何解析這個。我想在StatusCode中獲得1

如果我這樣做:

dd($xml->StatusCode); 

我收到此:

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

如何得到公正1

+1

'$ XML-> StatusCode'仍然是一個對象。你可以通過各種方式將其強制轉換爲字符串,例如簡單地'echo $ xml-> StatusCode'。 – ishegg

+0

謝謝,它的工作。 – Seio

+0

我提交了一個更詳細的答案。 – ishegg

回答

0

var_dump()輸出正確。 $xml->StatusCode是一個SimpleXMLElement實例。這是在需要的情況下,當然你必須這樣做,例如,一個子元素添加到它:

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

如果$xml->StatusCode包含的元素,而不是SimpleXMLElement實例的唯一值,你就不能對加載的XML進行任何修改。

因此,您需要做的是將StatusCode的值轉換爲字符串。有這樣做的各種方式:

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