轉換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);

?>



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