我正在使用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以获取描述节点?
感谢任何指导!
答案 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。如果遇到问题,请务必检查它们。