转换XML和数组


两个方法 递归转换 数组和xml

<?php
/*simplexml数组和xml转换*/



// 对象转数组:为了更好地找到需要的节点
function toarray($sim){
	// 1 先把最外面的object变成数组
	$sim=(array)$sim;
	//如果是对象或者数组,就都递归,运用上面的转变,如果不是这两者之一就pass
	foreach ($sim as $k => $v) {
		if ($v instanceof simplexmlelement||is_array($v)) {
			$sim[$k]=toarray($v);
		}
	}	
	return $sim;
}
$sx=simplexml_load_file('./try.xml');
print_r($sx);
print_r(toarray($sx));
// 看源代码可以看到,网页返回是报错






$arr=array('a'=>'111',
		'b'=>'2222',
		'c'=>array(
			'd'=>'hahaha',
			'e'=>array(
				'what'=>'the x')));

// 数组转xml,新的数组加入到新xml里,,arr to xml
function toxml($arr,$node=null){
	// 创建新xml文件
	if ($node==null) {
	$simxml=new simpleXMLElement ('<?xml version="1.0" encoding="utf-8"?><root></root>');
	}else{
		$simxml=$node;
	}
	// 
	foreach ($arr as $k => $v) {
		if (is_array($v)) {
			// addChild(节点名,内容)
			// 如果是数组,就要建节点(下方的那行) 在下一轮把这个数组里的东西放进去
			// v数组 大节点名是k,到下一回,把东西放进这个simxml-》addchild里
			toxml($v,$simxml->addChild($k));

			//如果数组键是数字,就要自己给他个标签名,因为直接用数字 会出问题
		}else if (is_numeric($k)) {
			$simxml->addChild('item',$v);	

		}else{
			// 不是数组就直接添加子元素 键名-键值
			$simxml->addChild($k,$v);
		}
	}	
	return $simxml->saveXML();
}

header('content-type:text/xml');
echo toxml($arr);

?>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章