array 和 xml 相互转换

本文介绍了一个PHP类,用于实现关联数组与XML格式字符串之间的转换。通过该类提供的方法,可以轻松地将PHP数组转换为XML字符串或将XML字符串解析回PHP数组。

ContractedBlock.gifExpandedBlockStart.gifCode
<?PHP
/*************************************************************************/
/* This class stores associative arrays in an xml formated string.       */
/* There's also a function thar retrieves them. If you try to use        */ 
/* xml2array with a general xml, it can fail, since there can be some    */
/* repeated indexesdot.gif.                                                  */
/*************************************************************************/

/*************************************************************************/
/* Use:
/* 
<?PHP
include('assoc_array2xml.php');
$example_array=array('one'=>'23','two'=>array('subone'=>'22',subtwo=>'233'),'three'=>'2');
$converter= new assoc_array2xml;
$string=$converter->array2xml($example_array);
echo "******\n$string\n********\n";
$array=$converter->xml2array($string);
print_r($array);
?>
 
*/
class Eezhong_Arraytoxml {
    
var $text;
    
var $arrays, $keys, $node_flag, $depth, $xml_parser;
    
/*Converts an array to an xml string*/
    
function array2xml($array) {
    
//global $text;
    $this->text="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><array>";
    
$this->text.= $this->array_transform($array);
    
$this->text .="</array>";
    
return $this->text;
    }
    
    
function array_transform($array){
    
//global $array_text;
    foreach($array as $key => $value){
    
if(!is_array($value)){
     
$this->text .= "<$key>$value</$key>";
     } 
else {
     
$this->text.="<$key>";
     
$this->array_transform($value);
     
$this->text.="</$key>";
     }
    }
    
return $array_text;
    
    }
    
/*Transform an XML string to associative array "XML Parser Functions"*/
    
function xml2array($xml){
    
$this->depth=-1;
    
$this->xml_parser = xml_parser_create();
    
xml_set_object($this->xml_parser, $this);
    
xml_parser_set_option ($this->xml_parser,XML_OPTION_CASE_FOLDING,0);//Don't put tags uppercase
    xml_set_element_handler($this->xml_parser, "startElement", "endElement");
    
xml_set_character_data_handler($this->xml_parser,"characterData");
    
xml_parse($this->xml_parser,$xml,true);
    
xml_parser_free($this->xml_parser);
    
return $this->arrays[0];
    
    }
    
function startElement($parser, $name, $attrs)
     {
       
$this->keys[]=$name//We add a key
       $this->node_flag=1;
       
$this->depth++;
     }
    
function characterData($parser,$data)
     {
       
$key=end($this->keys);
       
$this->arrays[$this->depth][$key]=$data;
       
$this->node_flag=0//So that we don't add as an array, but as an element
     }
    
function endElement($parser, $name)
     {
       
$key=array_pop($this->keys);
       
//If $node_flag==1 we add as an array, if not, as an element
       if($this->node_flag==1){
         
$this->arrays[$this->depth][$key]=$this->arrays[$this->depth+1];
         
unset($this->arrays[$this->depth+1]);
       }
       
$this->node_flag=1;
       
$this->depth--;
     }
    
    }
//End of the class

?>

转载于:https://www.cnblogs.com/wangbin/archive/2009/07/07/1518141.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值