最近需要使用到这个功能。
我们通过array这个键值对这个功能,再通过递归的思想构造xml文档。 XMLWriter()这个类的使用显得可有可无。 毕竟,可以采用直接字符串的方法直接构造出xml文档..嗯。这是个人思路
<meta charset="utf-8"/>
<?php
error_reporting(E_ALL);//<meta charset="utf-8"/>
/**
* Created by PhpStorm.
* User: ipqhjjybj
* Date: 13-12-21
* Time: 下午3:18
*/
$data_array = array(
"ShopMain" => array(
"MainShopID" => "2013",
"MainPicURL" => "localhost/mobileAsserts/images/2013_one_main.png",
"Title" => "这里是产品的标题",
"Description" => "这里是产品的描述",
"ClassID" => "1",
"Price" => "333.23",
"RecommendLevel" => "3"
)
);
// 根结点
/**
* @param $xml class
* @param $data array
*/
function create($data)
{
global $xml;
foreach($data as $key => $row)
{
$xml .= "<".$key.">";
if(is_array($row)){
create($row);
}else{
$xml.=$row;
}
$xml .= "</".$key.">";
}
}
//
//$data_array 必须是一个数组对象,且格式如上文所示
//切记!!
create($data_array);
/*
这是输出的xml的结构
$xml = "
<ShopMain>
<MainShopID>2013</MainShopID> <!--产品编号-->
<MainPicURL>localhost/mobileAsserts/images/2013_one_main.png</MainPicURL><!--产品的主文件URL-->
<Title>这里是产品的标题</Title>
<Description>这里是产品的描述</Description>
<ClassID>1</ClassID><!--这里是产品的所属类别-->
<Price>333.23</Price> <!--这里是产品的价格-->
<RecommendLevel>3</RecommendLevel><!--产品的推荐程度-->
</ShopMain>";
*/
//下面开始发送xml数据
function curl_post($url, $post = NULL, array $options = array())
{
$header[] = "Content-type: text/xml";
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => $header,//CURLOPT_HTTPHEADER => header,//错误的用法CURLOPT_HEADER => $header,这里==我花了半个小时
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 4,
CURLOPT_POSTFIELDS => $post
);
$ch = curl_init($url);
curl_setopt_array($ch, ($options + $defaults));
if( ! $result = curl_exec($ch))
{
trigger_error(curl_error($ch));
}
curl_close($ch);
return $result;
}
//下面是函数实现,发送数据
function debug($value)
{
$url = 'http://localhost/mobileAsserts/xmlParse.php'; // 这是你发送到的文件
return curl_post($url,$value);
}
echo debug($xml);
下面我附上解析的php代码
<?php
error_reporting(E_ALL);//<meta charset="utf-8"/>
/**
* Created by PhpStorm.
* User: ipqhjjybj
* Date: 13-12-22
* Time: 上午9:21
*/
$postStr = $GLOBALS['HTTP_RAW_POST_DATA'];
//echo $GLOBALS[0];
if(!empty($postStr))
{
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$MainShopID = $postObj->MainShopID; // 通过类似的方法可以获得
$Title = $postObj->Title;
echo $MainShopID; //可以类似获得所需要的
echo $Title;
}
else{
echo "No post data";
}
?>
真心因为几个错误弄了好久。
1、php函数内部使用了全局变量,却没有用global声明
2、curl函数调用时,参数写错了。
转载请附上出处http://hlyblog.net/?p=57