2017-10-07 224 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