>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 xml을 배열로 변환하는 코드 공유

PHP를 사용하여 xml을 배열로 변환하는 코드 공유

WBOY
WBOY원래의
2016-07-25 08:57:201216검색
如何将xml数据转换为简单易读的数组数据呢?本文分享的这段代码,可以实现这个功能,有需要的朋友看看吧。

以下代码,实现将xml转换为数组的功能。 例子:

<?php
/**
* 转换xml为数组
* edit by bbs.it-home.org
*/
class xml {  
    private $parser;  
    private $tag_cur=0;  
    private $data=array();  
    private $struct=array();  
    function xml() {  
        $this->parser = xml_parser_create();  
        xml_set_object($this->parser,&$this);  
        xml_set_element_handler($this->parser,"tag_open","tag_close");  
        xml_set_character_data_handler($this->parser,"cdata");  
    }  
    function parse($data) {  
        $this->data=array();  
        $this->struct=array();  
        $this->tag_cur=0;  
        xml_parse($this->parser,$data);  
        return $this->data;  
    }  
    function tag_open($parser,$tag,$attributes) {  
        $this->struct[]=$tag;  
        $this->tag_cur++;  
    }  
    function cdata($parser,$cdata) {  
        $tmp=&$this->data;  
        for($i=0;$i<$this->tag_cur;$i++)  
        {  
            if(!isset($tmp[$this->struct[$i]]))  
            {  
                $tmp[$this->struct[$i]]=array();  
            }  
            $tmp=&$tmp[$this->struct[$i]];  
        }  
        if(!empty($tmp))  
        {  
            $tmp1=$tmp;  
            if(is_array($tmp1))  
            {  
                $tmp=array_merge($tmp1,array($cdata));  
            }else{  
                $tmp=array($tmp1,$cdata);  
            }  
        }else $tmp=$cdata;  
    }  
    function tag_close($parser,$tag) {  
        array_pop($this->struct);  
        $this->tag_cur--;  
    }  
}  
  
$xml=new xml();  
echo "<pre class="brush:php;toolbar:false">";  
print_r($xml->parse('<b1>b1</b1><b2>b2</b2><b3><c1><d1>d1</d1>
<d1>d1_2</d1><d1>d1_3</d1></c1></b3></a1><e1>1</e1>'));  
echo "
"; ?>

说明: 也可以使用 simplexml_load_string函数轻松搞定。



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.