Guzzle PHP:从WebService返回的Parse XML

时间:2015-12-09 16:09:32

标签: php guzzle

我正在使用Guzzle来调用USPS地址验证服务,并在响应中获取XML。然后,我使用以下内容从XML获取正文:

$body = $response->getBody();

产生以下内容:

<AddressValidateResponse>
    <Address ID="0">
        <Error>
            <Number>-2147219400</Number>
            <Source>clsAMS</Source>
            <Description>Invalid City.  </Description>
            <HelpFile/>
            <HelpContext/>
        </Error>
    </Address>
</AddressValidateResponse> 

我需要解析它以获取描述。

$ body目前是一个Object。我尝试将它转换为数组,但得到以下内容,这不是我想要的:

array (
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'stream' => NULL,
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'size' => NULL,
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'seekable' => true,
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'readable' => true,
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'writable' => true,
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'uri' => 'php://temp',
  '' . "\0" . 'GuzzleHttp\\Psr7\\Stream' . "\0" . 'customMetadata' => 
  array (
  ),
)  

有谁知道如何解析$ body以获取描述节点?

感谢任何指导!

1 个答案:

答案 0 :(得分:1)

在PHP中使用XML处理简单任务的最简单方法是SimpleXML

$xml = simplexml_load_string($body);
// Or if you're dealing with a Guzzle Response, you can even do
// $xml = $response->xml();

foreach($xml->Address as $address)
{
    echo $address->Error->Description;
}

当然你也应该做一些错误检查等。

此外,除了examples in the documentation之外,还有大量关于如何在PHP中处理XML数据的文章和answers here on SO。如果遇到问题,请务必检查它们。