我正在使用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数据。如果你遇到问题,一定要检查一下。