PHP解析xml的方法 <pre> <?php /** XML 文件分析类 * Date: 2013-02-01 * Author: fdipzone * Ver: 1.0 * * func: * loadXmlFile($xmlfile) 读入xml文件输出Array * loadXmlString($xmlstring) 读入xmlstring 输出Array */
class XMLParser{
/** 读取xml文件 * @param String $xmlfile * @return Array */ public function loadXmlFile($xmlfile){
// get xmlfile content $xmlstring = file_exists($xmlfile)? file_get_contents($xmlfile) : '';
// parser xml list($flag, $data) = $this->parser($xmlstring);
return $this->response($flag, $data);
}
/** 读取xmlstring * @param String $xmlstring * @return Array */ public function loadXmlString($xmlstring){
// parser xml list($flag, $data) = $this->parser($xmlstring);
return $this->response($flag, $data);
}
/** 解释xml内容 * @param String $xmlstring * @return Array */ private function parser($xmlstring){
$flag = false; $data = array();
// check xml format if($this->checkXmlFormat($xmlstring)){ $flag = true;
// xml to object $data = simpleXML_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);
// object to array $this->objectToArray($data); }
return array($flag, $data);
}
/** 检查xml格式是否正确 * @param String $xmlstring * @return boolean */ private function checkXmlFormat($xmlstring){
if($xmlstring==''){ return false; }
$xml_parser_obj = xml_parser_create();
if(xml_parse_into_struct($xml_parser_obj, $xmlstring, $vals, $indexs)===1){ // 1:success 0:fail return true; }else{ return false; }
}
/** object 转 Array * @param object $object * @return Array */ private function objectToArray(&$object){
$object = (array)$object;
foreach($object as $key => $value){ if($value==''){ $object[$key] = ""; }else{ if(is_object($value) || is_array($value)){ $this->objectToArray($value); $object[$key] = $value; } } }
}
/** 输出返回 * @param boolean $flag true:false * @param Array $data 转换后的数据 * @return Array */ private function response($flag=false, $data=array()){
return array($flag, $data);
}
}
?>
<?php require "XMLParser.class.php";
$xmlfile = 'file.xml'; $xmlstring = '<?xml version="1.0" encoding="utf-8"?> <xmlroot> <status>1000</status> <info></info> <result><id>100</id> <name>fdipzone</name> <gender>1</gender> <age>28</age> </result> </xmlroot>';
echo '<pre>';
$xml_parser = new XMLParser(); echo "response xmlfile\r\n"; list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile); if($flag){ print_r($xmldata); }
echo "response xmlstring\r\n"; list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring); if($flag){ print_r($xmldata); }
echo '</pre>'; ?> </pre>
|
请发表评论