PHP & Curl - 处理 XML 响应



希望有人能帮忙。

下面的脚本是一个简单的PHP和Curl脚本,基本上当我回显响应时,我会得到信息,但显然是在为Json编码之前。下面是我的PHP,$response运行良好,但我无法从$reponse2获得输出

我的问题是我想呼应较低的

$response = curl_exec($curl);
echo $response;
$ob = simplexml_load_string($response);
$json = json_encode($ob);
$response2 = json_decode($json, true);
echo $response2;
$TRACKINGData = $response2['trackingdetails'];
for($i=0;$i<count($TRACKINGData);$i++) { 
echo 'Tracking details: ' .$TRACKINGData[$i]['trackingnumber'].''; 

} ?>

for($i=0;$i<count($TRACKINGData);$i++) { 
echo 'Tracking details: ' .$TRACKINGData[$i]['trackingnumber'].''; 

} ?>

请看我从邮差那里得到的回复`

<trackingresponse>
<trackingdetails>
<trackingdetail>
<trackingnumber>4569788591</trackingnumber>
<parcelnumber>15504569788591</parcelnumber>
<consignmentnumber>4569788591</consignmentnumber>
<deliveryaddress1></deliveryaddress1>
<deliveryaddress2>Bramble Wood</deliveryaddress2>
<deliverylocality>1Street</deliverylocality>
<deliverycity></deliverycity>
<deliverypostcode></deliverypostcode>
<deliverycountrycode>GB</deliverycountrycode>
<etastart>1970-01-01T12:31:00+01:00</etastart>
<etaend>1970-01-01T13:31:00+01:00</etaend>
<parcelcode>15504569788591*19990</parcelcode>
<trackingevents>
<trackingevent>
<date>2022-09-24T08:32:00+01:00</date>
<code>15</code>
<type>OUT FOR DELIVERY</type>
<description>On vehicle for delivery between 12:31 - 13:31 Out For Delivery SMS notification sent</description>
<locality>Peterborough</locality>
<countrycode>GB</countrycode>
<etastart>12:31</etastart>
<etaend>13:31</etaend>
<imagekey></imagekey>
</trackingevent>
<trackingevent>
<date>2022-09-24T00:36:00+01:00</date>
<code>4</code>
<type>CONFIRMED AT DEPOT</type>
<description>Confirmed at depot</description>
<locality>Peterborough</locality>
<countrycode>GB</countrycode>
<imagekey></imagekey>
</trackingevent>
<trackingevent>
<date>2022-09-24T00:17:00+01:00</date>
<code>4</code>
<type>CONFIRMED AT DEPOT</type>
<description>Confirmed at depot</description>
<locality>Peterborough</locality>
<countrycode>GB</countrycode>
<imagekey></imagekey>
</trackingevent>
<trackingevent>
<date>2022-09-23T20:01:00+01:00</date>
<code>9</code>
<type>HUB SCAN</type>
<description>Confirmed at Hub</description>
<locality>Hub 3 - Bham</locality>
<countrycode>GB</countrycode>
<imagekey></imagekey>
</trackingevent>
<trackingevent>
<date>2022-09-23T18:34:00+01:00</date>
<code>0</code>
<type>PARCEL DATA</type>
<description>Customer data received</description>
<locality>Birmingham</locality>
<countrycode>GB</countrycode>
<imagekey></imagekey>
</trackingevent>
</trackingevents>
</trackingdetail>
</trackingdetails>
</trackingresponse>`

我不会为JSON而烦恼,如果您有复杂的XML,它实际上会给您带来麻烦。相反,SimpleXML使访问节点或对其进行迭代变得非常容易:

$obj = simplexml_load_string($xml);
// if you actually think you will get multiple
foreach($obj->trackingdetails->trackingdetail as $trackingDetail){
echo $trackingDetail->trackingnumber;
}
echo PHP_EOL;
// if you know you'll always have just one
echo $obj->trackingdetails->trackingdetail->trackingnumber;

演示:https://3v4l.org/THok5

$response2是一个数组,而不是字符串。将$response2转换为echo之前的字符串。

echo var_export($response2,true);

最新更新