如何解析 php / Laravel 5 中的 SimpleXMLElement?

How to parse SimpleXMLElement in php / Laravel 5?

我在后端使用 Guzzle 向外部 API 发出 XML 请求。

这是我创建 Guzzle 客户端的地方:

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

这是我提出请求的地方:

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

这是我获得 Guzzle 响应并尝试解析它的地方:

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

如果我这样做:

dd($xml);

我在 return 收到这个:

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

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

 /**
 * @param $xmlObject
 * @param array $out
 * @return array
 */
private function simpleXmlToArray($xmlObject, $out = array ())
{
    foreach ($xmlObject as $index => $node ){
        if(count($node) === 0){
            $out[$node->getName()] = $node->__toString ();
        }else{
            $out[$node->getName()][] = $this->simpleXmlToArray($node);
        }
    }

    return $out;
}