如何解析 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
/**
* @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;
}
我在后端使用 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
/**
* @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;
}