繁体   English   中英

如何在 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);

我收到这个作为回报:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM