使用PHP访问特定的XML节点
我有一个xml请求,看起来像下面的代码,我想在PHP变量中只存储响应中应该出现的节点速率值 我怎样才能做到这一点使用PHP访问特定的XML节点,php,xml,variables,request,Php,Xml,Variables,Request,我有一个xml请求,看起来像下面的代码,我想在PHP变量中只存储响应中应该出现的节点速率值 我怎样才能做到这一点 $zip = 90002; $pounds = 0.1; $shippingMode = "Express"; $url = "http://production.shippingapis.com/shippingAPI.dll"; $devurl ="testing.shippingapis.com/ShippingAPITest.dll"; $service = "RateV4
$zip = 90002;
$pounds = 0.1;
$shippingMode = "Express";
$url = "http://production.shippingapis.com/shippingAPI.dll";
$devurl ="testing.shippingapis.com/ShippingAPITest.dll";
$service = "RateV4";
$xml = rawurlencode("<RateV4Request USERID='USER' >
<Revision/>
<Package ID='1ST'>
<Service>$shippingMode</Service>
<ZipOrigination>10025</ZipOrigination>
<ZipDestination>".$zip."</ZipDestination>
<Pounds>".$pounds."</Pounds>
<Ounces>0</Ounces>
<Container></Container>
<Size>REGULAR</Size>
<Width></Width>
<Length></Length>
<Height></Height>
<Girth></Girth>
</Package>
</RateV4Request>");
$request = $url . "?API=" . $service . "&xml=" . $xml;
$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);
$result = curl_exec($ch);
curl_close($ch);
$zip=90002;
美元磅=0.1;
$shippingMode=“Express”;
$url=”http://production.shippingapis.com/shippingAPI.dll";
$devull=“testing.shippingapi.com/ShippingAPITest.dll”;
$service=“RateV4”;
$xml=rawurlencode(“
$shippingMode
10025
“$zip。”
“$英镑。”
0
有规律的
");
$request=$url。“?API=”$服务“&xml=”$xml;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$request);
curl_setopt($ch,CURLOPT_头,false);
curl_setopt($ch,CURLOPT_HTTPGET,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result=curl\u exec($ch);
卷曲关闭($ch);
答案应该是这样的。我只需要获取速率值
<?xml version="1.0" encoding="UTF-8"?>
<RateV4Response>
<Package ID="1ST">
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>1</Pounds>
<Ounces>8</Ounces>
<Container>NONRECTANGULAR</Container>
<Size>LARGE</Size>
<Width>15</Width>
<Length>30</Length>
<Height>15</Height>
<Girth>55</Girth>
<Zone>3</Zone>
<Postage CLASSID="1">
<MailService>Priority Mail<sup>&reg;</sup></MailService>
<Rate>24.85</Rate>
</Postage>
</Package>
</RateV4Response>
44106
20770
1.
8.
非矩形
大的
15
30
15
55
3.
优先邮递服务;注册/啜饮
24.85
最新代码
$zip = 90002;
$pounds = 0.1;
$shippingMode = "Express";
function USPSParcelRate($pounds,$zip,$shippingMode) {
$url = "http://production.shippingapis.com/shippingAPI.dll";
$devurl ="testing.shippingapis.com/ShippingAPITest.dll";
$service = "RateV4";
$userid = "023TAHAR4995";
$xml = rawurlencode("<RateV4Request USERID='023TAHAR4995' >
<Revision/>
<Package ID='1ST'>
<Service>$shippingMode</Service>
<ZipOrigination>10025</ZipOrigination>
<ZipDestination>".$zip."</ZipDestination>
<Pounds>".$pounds."</Pounds>
<Ounces>0</Ounces>
<Container></Container>
<Size>REGULAR</Size>
<Width></Width>
<Length></Length>
<Height></Height>
<Girth></Girth>
</Package>
</RateV4Request>");
$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);
echo $response->RateV4Response->Package->Postage->Rate;
}
USPSParcelRate($pounds,$zip, $shippingMode);
$zip=90002;
美元磅=0.1;
$shippingMode=“Express”;
功能USPSParcelRate($lbs,$zip,$shippingMode){
$url=”http://production.shippingapis.com/shippingAPI.dll";
$devull=“testing.shippingapi.com/ShippingAPITest.dll”;
$service=“RateV4”;
$userid=“023TAHAR4995”;
$xml=rawurlencode(“
$shippingMode
10025
“$zip。”
“$英镑。”
0
有规律的
");
$request=$url.?API=“.$service.”&xml=“.$xml;
//将POST值发送到USPS
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$request);
curl_setopt($ch,CURLOPT_头,false);
curl_setopt($ch,CURLOPT_HTTPGET,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//要发布的参数
$result=curl\u exec($ch);
卷曲关闭($ch);
$response=新的simplexmlement($result);
echo$response->RateV4Response->Package->Postage->Rate;
}
USPSParcelRate(英镑,$zip,$shippingMode);
这是一个关于这个问题的好教程
它会是这样的…可能不会马上工作,因为我还没有真正理解xml的结构…只是看了一眼…但大致是这样的…:)
或者如果它总是只有一个响应/包节点…那么您可以像这样得到速率
echo $XML->Pacakge->Postage->Rate;
使用simpleXML…但是我如何从上面的请求中获取响应,以便应用
新的simpleXML元素($response)
?那么代码中已经有了结果…$result=curl\u exec($ch)??只需将$result传递到simpleXML中……请参见下面……开始阅读PHP手册:也开始搜索网站,这样一个一般性的问题以前已经被问过并回答过了。@KyleK,请永远不要将新手引导到w3schools网站。它被认为是有害的。它什么也不打印。。。我用新代码更新了这篇文章如果你使用var_dump($response)会发生什么?在此之前不要关闭\u curl您确定您的响应是那个XML文件吗??在$result=curl\u exec($ch)之后使用var\u dump($result)时会发生什么情况;此页面可能会有所帮助,但它与我的答案没有太大区别…var_dump返回“string(405)”1002590020.10VARIABLEREGULAR8Express Mailsup&;注册/sup30.60“
echo $XML->Pacakge->Postage->Rate;