从在PHP中完成的API获取/解析XML数据

我在我的网上商店安装了一个UPS运输计算器API,它正确地获得价格,这太棒了! 我找不到任何方法让这些价格变成有用的格式。 我想用它们作为一个PHP变量。

对于这个例子,我们会打电话给我的购物车cart.php。

api正在被一个名为ups.php的文件执行。

当客户将物品放入购物车并填写自己的邮政编码时,他们会点击一个提交按钮,然后将它们定向到运行ups.php脚本的新购物车页面,并在页面上显示数据(稍后我将删除该数据所以它可以在后台运行)。 如果这些文件中的任何一个都是.xml文件,我可能会学习如何解析xml数据或在php中使用simpleXML命令......但他们似乎总是想要一个xml文件的位置,这是我没有的。 有谁知道如何让我的PHP文件中包含的XML数据可用作PHP变量?

这里是ups.php的一些代码:

    <?php
      $ch = curl_init("https://www.ups.com/ups.app/xml/Rate");
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_TIMEOUT, 60);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
        $result=curl_exec ($ch);
    echo ''. $result. '';
        $data = strstr($result, '<?');
        $xml_parser = xml_parser_create();
        xml_parse_into_struct($xml_parser, $data, $vals, $index);
        xml_parser_free($xml_parser);
        $params = array();
        $level = array();
        foreach ($vals as $xml_elem) {
         if ($xml_elem['type'] == 'open') {
        if (array_key_exists('attributes',$xml_elem)) {
             list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
        } else {
             $level[$xml_elem['level']] = $xml_elem['tag'];
        }
         }
         if ($xml_elem['type'] == 'complete') {
        $start_level = 1;
        $php_stmt = '$params';  
        while($start_level < $xml_elem['level']) {
             $php_stmt .= '[$level['.$start_level.']]';
             $start_level++;
        }
        $php_stmt .= '[$xml_elem['tag']] = $xml_elem['value'];';
        eval($php_stmt);
         }
        }
        curl_close($ch);
        return $params['RATINGSERVICESELECTIONRESPONSE']['RATEDSHIPMENT']['TOTALCHARGES']['MONETARYVALUE'];
    }
?>

这里是当我运行这个.php文件时,我的页面上的文本输出的样子:

HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Wed, 25 Jul 2012 20:27:46 GMT 
Server: Apache X-Frame-Options: SAMEORIGIN Pragma: no-cache 
Content-Length: 1589 
X-Powered-By: Servlet/2.5 JSP/2.1 
Vary: User-Agent Content-Type: application/xml Bare Bones Rate Request1.00011Success03Additional Handling has automatically been set on Package 1.Your invoice may vary from the displayed reference ratesLBS120.0USD65.56USD8.50USD74.06USD65.56USD8.50USD74.06120.0LBS120.0

那么我明白了。 这里是新的代码...方式更短。 方式更简单。

我使用PHP命令explode(); 并只是正常的数组语法,$ newvariable = $ existing_array [key#];

感谢评论家伙!

    <?php
    $ch = curl_init("https://www.ups.com/ups.app/xml/Rate");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_TIMEOUT, 60);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    $result=curl_exec ($ch);                    
    $upsout = (explode('USD', $result, 15));
    $handling = $upsout[3]; 
    echo "Shipping cost is $";
    echo $handling; 
    curl_close($ch);
}

?>

链接地址: http://www.djcxy.com/p/6087.html

上一篇: Getting/Parsing XML data from an API that is done in PHP

下一篇: Estimate tax based on zip code