首页 > 开发 > XML > 正文

将平行结构XML转化为树形XML结构,递归

2020-03-22 20:28:02
字体:
来源:转载
供稿:网友
  • 转换的PHP代码如下
    header("Content-type:text/xml;charset=utf-8");	function getRootPath(){		$biasNum = substr_count($_SERVER['PHP_SELF'], '/'); //用'/'分割当前路径字符串,并计算分割后的字符串数量		$relativePath = './'; //初始化变量$relativePath为'./'		for ($i = 0; $i < ($biasNum - 1); $i ++) { //循环添加'../'    		$relativePath .= '../';		}		return $relativePath;	}		function display_children($pid,$level,$root,$temDom){			$targetRoot=$temDom->getElementsByTagName('root')->item(0);   			foreach ($root->childNodes as $sons){   				$sonID=str_replace('n', '', $sons->nodeName);   				$sonPid=$sons->getElementsByTagName('pid')->item(0)->nodeValue;   				$sonName=$sons->getElementsByTagName('name')->item(0)->nodeValue;   				$sonExplain=$sons->getElementsByTagName('explain')->item(0)->nodeValue;   				if($sonPid==$pid){	   				//echo str_repeat('+', $level).$sonName.' and '.$sonID.'<br/>';	   				if($level==1){	   					$level1=$temDom->createElement('level1');	   					$level1->setAttribute('aid', $sonID);	   					$level1->setAttribute('name', $sonName);	   					$level1->setAttribute('explain', $sonExplain);	   					$targetRoot->appendChild($level1);	   					//$level1->getAttribute('');	   					   				}else{	   					$parsentLevel=$temDom->getElementsByTagName('level'.($level-1));	   					foreach ($parsentLevel as $levels){	   						if($levels->getAttribute('aid')==$sonPid){	   							$sonLevel=$temDom->createElement('level'.$level);	   							$sonLevel->setAttribute('aid', $sonID);			   					$sonLevel->setAttribute('name', $sonName);			   					$sonLevel->setAttribute('explain', $sonExplain);	   							$levels->appendChild($sonLevel);	   						}	   					}	   						   				}	   				display_children($sonID,$level+1,$root,$temDom);   				}   			}	} 	 	$dom=new DOMDocument('1.0','utf-8');   		$dom->load(getRootPath().'mydata/area/index/main.xml');   		$root=$dom->getElementsByTagName('root')->item(0);   		$temDom=new DOMDocument('1.0','utf-8');   		$root1=$temDom->createElement('root');   		$temDom->appendChild($root1);   		//$tartRoot=$temDom->getElementsByTagName('root')->item(0);   		display_children(0, 1, $root,&$temDom);   		echo $temDom->saveXML();   		   	

    转换后的树形结构如下


    <?xml version="1.0" encoding="utf-8"?><root><level1 aid="42" name="新加坡" explain="花园国度"/><level1 aid="41" name="俄罗斯" explain="北极熊"/><level1 aid="40" name="韩国" explain="高丽棒子"/><level1 aid="39" name="日本" explain="小日本"/><level1 aid="38" name="美国" explain="霸权主义国家"/><level1 aid="37" name="中国" explain="伟大的国家"><level2 aid="66" name="河南省" explain=""><level3 aid="80" name="开封" explain="少林所在地"/><level3 aid="79" name="洛阳" explain="历史名城"/><level3 aid="78" name="郑州市" explain="河南的省会"><level4 aid="81" name="测试区" explain=""/></level3></level2><level2 aid="55" name="贵州省" explain=""/><level2 aid="54" name="海南省" explain=""/><level2 aid="53" name="西藏自治区" explain=""/><level2 aid="52" name="内蒙古自治区" explain=""/><level2 aid="51" name="宁夏回族自治区" explain=""/><level2 aid="50" name="甘肃省" explain=""/><level2 aid="49" name="云南省" explain=""/><level2 aid="48" name="广西壮族自治区" explain=""/><level2 aid="47" name="广东省" explain=""/><level2 aid="46" name="陕西省" explain=""/><level2 aid="45" name="山西省" explain=""/><level2 aid="44" name="湖南省" explain=""/><level2 aid="43" name="湖北省" explain=""><level3 aid="70" name="枣阳市" explain=""/><level3 aid="61" name="孝感市" explain=""/><level3 aid="60" name="十堰市" explain=""/><level3 aid="59" name="荆州市" explain=""/><level3 aid="58" name="鄂州市" explain=""/><level3 aid="57" name="襄阳市" explain=""><level4 aid="68" name="襄城区" explain=""/><level4 aid="67" name="谷城县" explain=""/></level3><level3 aid="56" name="武汉市" explain=""><level4 aid="86" name="徐东区" explain="我去过"/><level4 aid="85" name="蔡甸区" explain=""/><level4 aid="84" name="江汉区" explain=""/><level4 aid="83" name="江岸区" explain=""/><level4 aid="82" name="青山区" explain=""/><level4 aid="69" name="洪山区" explain=""/><level4 aid="63" name="江汉区" explain=""/></level3></level2></level1></root>

    XML平行结构如下

    <?xml version="1.0" encoding="utf-8"?><root><n86><name><![CDATA[徐东区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[我去过]]></explain></n86><n85><name><![CDATA[蔡甸区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[]]></explain></n85><n84><name><![CDATA[江汉区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[]]></explain></n84><n83><name><![CDATA[江岸区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[]]></explain></n83><n82><name><![CDATA[青山区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[]]></explain></n82><n81><name><![CDATA[测试区]]></name><pid><![CDATA[78]]></pid><explain><![CDATA[]]></explain></n81><n80><name><![CDATA[开封]]></name><pid><![CDATA[66]]></pid><explain><![CDATA[少林所在地]]></explain></n80><n79><name><![CDATA[洛阳]]></name><pid><![CDATA[66]]></pid><explain><![CDATA[历史名城]]></explain></n79><n78><name><![CDATA[郑州市]]></name><pid><![CDATA[66]]></pid><explain><![CDATA[河南的省会]]></explain></n78><n70><name><![CDATA[枣阳市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n70><n69><name><![CDATA[洪山区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[]]></explain></n69><n68><name><![CDATA[襄城区]]></name><pid><![CDATA[57]]></pid><explain><![CDATA[]]></explain></n68><n67><name><![CDATA[谷城县]]></name><pid><![CDATA[57]]></pid><explain><![CDATA[]]></explain></n67><n66><name><![CDATA[河南省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n66><n63><name><![CDATA[江汉区]]></name><pid><![CDATA[56]]></pid><explain><![CDATA[]]></explain></n63><n61><name><![CDATA[孝感市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n61><n60><name><![CDATA[十堰市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n60><n59><name><![CDATA[荆州市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n59><n58><name><![CDATA[鄂州市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n58><n57><name><![CDATA[襄阳市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n57><n56><name><![CDATA[武汉市]]></name><pid><![CDATA[43]]></pid><explain><![CDATA[]]></explain></n56><n55><name><![CDATA[贵州省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n55><n54><name><![CDATA[海南省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n54><n53><name><![CDATA[西藏自治区]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n53><n52><name><![CDATA[内蒙古自治区]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n52><n51><name><![CDATA[宁夏回族自治区]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n51><n50><name><![CDATA[甘肃省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n50><n49><name><![CDATA[云南省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n49><n48><name><![CDATA[广西壮族自治区]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n48><n47><name><![CDATA[广东省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n47><n46><name><![CDATA[陕西省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n46><n45><name><![CDATA[山西省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n45><n44><name><![CDATA[湖南省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n44><n43><name><![CDATA[湖北省]]></name><pid><![CDATA[37]]></pid><explain><![CDATA[]]></explain></n43><n42><name><![CDATA[新加坡]]></name><pid><![CDATA[0]]></pid><explain><![CDATA[花园国度]]></explain></n42><n41><name><![CDATA[俄罗斯]]></name><pid><![CDATA[0]]></pid><explain><![CDATA[北极熊]]></explain></n41><n40><name><![CDATA[韩国]]></name><pid><![CDATA[0]]></pid><explain><![CDATA[高丽棒子]]></explain></n40><n39><name><![CDATA[日本]]></name><pid><![CDATA[0]]></pid><explain><![CDATA[小日本]]></explain></n39><n38><name><![CDATA[美国]]></name><pid><![CDATA[0]]></pid><explain><![CDATA[霸权主义国家]]></explain></n38><n37><name><![CDATA[中国]]></name><pid><![CDATA[0]]></pid><explain><![CDATA[伟大的国家]]></explain></n37></root> 

    优点支持无限极分类,但是访问接口时返回XML树形结构,更利于程序读取!


    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 上一篇:DOM解析XML

    下一篇:返回列表

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表