php操作xml(1)

关于php操作xml的文章在网上找了好多,才能总结如下:

因为php对数组操作比较方便,所以该文章主要是数组和xml之间的转换,希望能对读者有用

1.把数组转换为xml

如果需要把数组转换为xml需要下面两个函数(其实这两个函数可以合并为一个函数,为了以后调用和扩展方便,所以放到两个函数里了)

function xmlEncode($array, $encoding='utf-8', $root="root") {
    $xml = '<?xml version="1.0" encoding="' . $encoding . '"?>';
    $xml.= '<' . $root . '>';
    $xml.= arrayToXml($array);
    $xml.= '</' . $root . '>';
    return $xml;
}
function arrayToXml($array) {
    if (is_object($array)) {
        $data = get_object_vars($array);
    }
    $xml = '';
    foreach ($array as $key => $val) {
        is_numeric($key) && $key = "item id=\"$key\"";
        $xml.="<$key>";
        $xml.= ( is_array($val) || is_object($val)) ? dataToXml($val) : $val;
        list($key, ) = explode(' ', $key);
        $xml.="</$key>";
    }
    return $xml;
}

比如你的数组如下:

$data = array(
		'key1'=>'value1',
		'key2'=>'value2',
		'key3'=>array(
				'key31'=>'value31',
				'key32'=>'value32',
				'key33'=>'value33'),
		'key4'=>array(
				'key41'=>'value41',
				'key42'=>'value42')
		);

数组转换为xml的代码如下:

$xml = xmlEncode($data,'utf-8','root');
echo $xml;

输出结果如下图所示:


 

 2.把xml转换为数组

如要把xml转换为数组需要用到以下函数

function objectsIntoArray($arrObjData) {
	$arrData = array();
	// if input is object, convert into array
	if (is_object($arrObjData)) {
	   $arrObjData = get_object_vars($arrObjData);
	}
	//dump($arrObjData);exit;
	if (is_array($arrObjData)) {
	   foreach ($arrObjData as $index => $value) {
	      if (is_object($value) || is_array($value)) {
	          $value = $this->objectsIntoArray($value); // recursive call
	      }
	       $arrData[$index] = $value;
	   }
	 }
	 return $arrData;
 
}

比如xml为上面生成的xml,转换为数组的代码如下:

$xml = simplexml_load_string($xml);
//如果你的xml是一个文件,可以用simplexml_load_file($filepath)
$return = objectsIntoArray($xml);

把$return打印出来就是你要的数组了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜中雨滴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值