使用PHP访问特定的XML节点

使用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

我有一个xml请求,看起来像下面的代码,我想在PHP变量中只存储响应中应该出现的节点速率值

我怎样才能做到这一点

$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&lt;sup&gt;&amp;reg;&lt;/sup&gt;</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;