1,xml文件解析类 XMLParser.class.php
<?php
/** XML 文件分析类
* Date: 2013-02-01
* Author: fdipzone
* Ver: 1.0
* Edition www.jb200.com
* 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);
}
}
?>
2,演示示例
附,PHP XML预定义常量: http://www.jb200.com/shouce/php5/libxml.constants.html