php解析xmlファイル

2544 ワード

	/******************************************
	*   XML      
	* @param  string $str
	* @return        true,    false
	*******************************************/
	function xml_parser($str){
		$xml_parser = xml_parser_create();
		if(!xml_parse($xml_parser,$str,true)){
			xml_parser_free($xml_parser);
			return false;
		}else {
			return true;
		}
	}
	
	
	/********************************************
	 *  @  GPX  ,      
	 *  @$filename:    
	 *******************************************/
	private function readGPX($filename)
	{
		$xmlDoc = new DOMDocument();
		$data=@file_get_contents($filename);
		//$isok = strpos($data,"<?xml");
		$isok = $this->xml_parser($data);
		$result = array();
		if($isok == true){
			if($xmlDoc->load($filename)){
			 $XMLTrkseg = $xmlDoc->getElementsByTagName('trkseg')->item(0);
			 if(count($XMLTrkseg->getElementsByTagName('trkpt')) >= 1){
				 foreach($XMLTrkseg->getElementsByTagName('trkpt') as $trkpt){
				 	$ele="";
				 	$time = "";
				 	$speed = "";
				 	$lat = "";
				 	$lon = "";
				 	try{
				 		$eles = $trkpt->getElementsByTagName("ele");
				 		$ele = $eles->item(0)->nodeValue;
				 	}catch(Exception $e){ }
				 	try{
				 		$times = $trkpt->getElementsByTagName("time");
				 		$time = $times->item(0)->nodeValue;
				 		if($time  !=""){
				 			$time = str_replace("T"," ",str_replace("Z","",$time));
				 		}
				 	}catch(Exception $e){ }
				 	try{
				 		$speeds = $trkpt->getElementsByTagName("speed");
				 		if(isset($speeds->item(0)->nodeValue))
				 		$speed = $speeds->item(0)->nodeValue;
				 	}catch(Exception $e){ }
				 	try{
				 		$lat =  $trkpt->getAttribute("lat");
				 	}catch(Exception $e){ }
				 	try{
				 		$lon = $trkpt->getAttribute("lon");
				 	}catch(Exception $e){ }
				 	$x = array("ele"=>$ele,"time"=>$time,"speed"=>$speed,"lat"=>$lat,"lon"=>$lon);
				 	$result[] = $x;
				 }
			 }
			}
		}
		return $result;
	}