Guzzle PHP:解析WebService返回的XML


Guzzle PHP: Parse XML returned from WebService

我正在使用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以获得描述节点吗?

感谢您的指导!

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

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

此外,除了文档中的示例外,这里还有大量关于SO的文章和答案,介绍如何在PHP中处理XML数据。如果你遇到问题,一定要检查一下。