我有问题。我在USPS网站上注册,从那里我拿了用户并通过访问他们的API。但是当我尝试访问跟踪时,我得到的结果是一个包含所有结果而没有格式化XML的单个文本字符串
我使用的脚本是:
$trackingNumber = $numtrack;
$url = "http://production.shippingapis.com/shippingAPI.dll";
$service = "TrackV2";
$xml = rawurlencode("<TrackRequest USERID='MYIDACCOUNT'><TrackID ID='".$trackingNumber."'></TrackID></TrackRequest>");
$request = $url . "?API=" . $service . "&XML=" . $xml;
// send the POST values to USPS
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$request);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// parameters to post
$result = curl_exec($ch);
curl_close($ch);
$response = new SimpleXMLElement($result);
print_r($result);
$deliveryStatus = $response->TrackResponse->TrackSummary->Status;
echo $deliveryStatus;
我得到的结果是
您的商品于2015年6月5日上午10:51在意大利送达。定制 清关处理完成,2015年6月4日,下午5:29,ITALYCustoms 清仓,2015年6月4日,上午11:20,意大利通过排序处理 设施,2015年6月4日,上午11:19,ITALYDeparted,2015年6月3日,7:43 am,Milan,ITALYDeparted,2015年6月2日,下午3:34,迈阿密,UNITED STATESArrived,2015年6月2日,上午10:05,迈阿密,美国处理 通过分拣设施,2015年6月1日,晚上8:07,ISC MIAMI FL (USPS)于2015年6月1日下午8:07抵达排序工厂,ISC MIAMI FL (美国邮政)于2015年6月1日凌晨2:40离开USPS设施,佛罗里达州迈阿密 33112于2015年5月31日上午11点22分抵达USPS Origin Facility,迈阿密, FL 33112离开邮局,2015年5月30日下午4:07,佛罗里达州BOCA RATON 33431Accept,2015年5月30日,下午12:27,佛罗里达州BOCA RATON 33431Pre-Shipment Info发送至USPS,2015年5月29日
如何获取XML然后推断我需要的个人信息?我不能跳出来。
答案 0 :(得分:1)
您必须构建xml响应:
这样的事情:
<?php
/*
SimpleXMLElement Object ( [TrackInfo] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => CV034836340US ) [TrackSummary] => Your item was delivered in ITALY at 10:51 am on June 5, 2015. [TrackDetail] => Array ( [0] => Customs clearance processing complete, June 4, 2015, 5:29 pm, ITALY [1] => Customs Clearance, June 4, 2015, 11:20 am, ITALY [2] => Processed Through Sort Facility, June 4, 2015, 11:19 am, ITALY... ) ) )
*/
//SIMULATION FROM YOUR OBJECT
$response = (object)array(
'TrackInfo'=>array('ID'=>12342432),
'TrackSummary'=>'Your item was delivered in ITALY at 10:51 am on June 5, 2015.',
'TrackDetail' => array('Customs clearance processing complete, June 4, 2015, 5:29 pm, ITALY','Customs Clearance, June 4, 2015, 11:20 am, ITALY','Processed Through Sort Facility, June 4, 2015, 11:19..., ITALY... ')
);
$string = '<?xml version="1.0" encoding="utf-8"?>
<TrackResponse>
<TrackInfo>'.(string)$response->TrackInfo['ID'].'</TrackInfo>
<TrackSummary>'.(string)$response->TrackSummary.'</TrackSummary>
<TrackDetail>';
foreach($response->TrackDetail as $detail){
$string .= '<detail>'.(string)$detail.'</detail>';
}
$string .='</TrackDetail>
</TrackResponse>';
header('Content-Type: application/xml; charset=utf-8');
echo $string
?>
答案 1 :(得分:1)
您的浏览器会将XML标记解释为HTML标记。如果您希望将XML回显给用户,请使用<
转发htmlspecialchars
等特殊字符:
echo htmlspecialchars($deliveryStatus);
答案 2 :(得分:0)
如果对某人有帮助:
$deliveryStatus = $response->TrackInfo->TrackSummary;
echo $deliveryStatus;