WEB开发网
开发学院WEB开发PHP XML 转成 数组对象 阅读

XML 转成 数组对象

 2012-05-17 07:26:29 来源:WEB开发网   
核心提示:XmlToArray.php点击下载此文件php;"><?php/** * Created by JetBrains PhpStorm. * User: hedgehog * Date: 12-5-9 * Time: 下午4:37 * To change this template use File |

XmlToArray.php点击下载此文件

php;">
<?php
/**
 * Created by JetBrains PhpStorm.
 * User: hedgehog
 * Date: 12-5-9
 * Time: 下午4:37
 * To change this template use File | Settings | File Templates.
 */
class XmlToArray
{
    private $xml;
    private $contentAsName="content" ;
    private $attributesAsName="attributes";
    private $xml_array = array();

    public function setXml( $xmlstr )
    {
        $this->xml = $xmlstr ;
        return $this ;
    }

    public function setContentAsName( $name )
    {
        $this->contentAsName = $name ;
        return $this ;
    }

    public function  setAttributeAsName( $name )
    {
        $this->attributesAsName = $name ;
        return $this ;
    }

    private function createXMLArray( $node,&$parent_node,$node_index =0)
    {
        $node_attrbutes= array() ;
        $node_name = $node->getName() ;
        $attributes = $node->attributes() ;
        $children  = $node->children () ;


    // 遍历节点上的所有属性
        foreach( $attributes as $attrname => $attrvalue )
        {
            $attrvalue  = ( string )$attrvalue ;
            $node_attrbutes[ $attrname ] = trim( $attrvalue ) ;
        }
        $content = "";
        if( count($children) == 0 )
        {
            $content =   ( string ) $node   ;
        }

        $node_array = array(
           $this->attributesAsName =>$node_attrbutes ,
           $this->contentAsName => trim( $content )
        );
//  设置层级关系
            if(  !isset( $parent_node[ $node_name ] )  )
            {
                $is = count( $parent_node ) ;
                if(  !isset( $parent_node[ $this->attributesAsName ] ) && count( $parent_node ) > 0 )
                {

                    $last_index = count( $parent_node ) -1 ;
                   $parent_node =& $parent_node[ $last_index ];
                   $parent_node[ $node_name ] = $node_array ;
                }
                else
                {
                    $parent_node[ $node_name ] = $node_array ;
                }
            }
            else
            {
                     $append  = &$parent_node[ $node_name ] ;
                   if( isset( $append[ $this->attributesAsName ] ) )
                   {
                       $parent_node[ $node_name ]  = array( $append );
                       $append  = &$parent_node[ $node_name ] ;

                   }
                   if( isset( $append[ $node_index ] ) )
                   {
                       $append =  &$append[ $node_index ] ;
                   }
                // 追加
                    array_push( $append ,  $node_array ) ;
            }

        $index = 0 ;
        // 递归操作
        foreach( $children as $childnode )
        {
            $parent =  &$parent_node[ $node_name  ] ;
            $this->createXMLArray( $childnode ,$parent,$index ++ );
        }
       return  $parent_node ;
    }

    public  function  parseXml( $isjson=false)
    {
        $root = simplexml_load_string ( $this->xml ) ;
        $parent_node = array();
        $array = $this->createXMLArray( $root ,$parent_node ) ;

        return $isjson ?  json_encode( $array ) : $array ;
    }
}

上一页  1 2 

Tags:XML 数组 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接