码迷,mamicode.com
首页 > Web开发 > 详细

php xml转为xml或者json

时间:2015-05-14 18:31:07      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

<?php

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 ;
    }
}

 

//解析为json
function toJSON()
{
    require_once ‘XmlToArray.php‘;
    $XML= ‘simple.xml‘;

    header("Content-type: text/html; charset=utf-8") ;
    $xml_to_array = new XmlToArray();
    $xml_to_array->setXml($XML);
    // 当标签名与内置属性有冲突的时候可以自定义相关属性名,一般其概况不需要设置
    //$xml_to_array->setAttributeAsName("attributeAsName")->setContentAsName("contentasName");
    $r = $xml_to_array->parseXml(true);
    print_r( $r ) ;
}

// 解析为数组
function toArray()
{
    require_once ‘XmlToArray.php‘;
    $XML = ‘simple.xml‘;
    header("Content-type: text/html; charset=utf-8") ;
    $xml_to_array = new XmlToArray();
    $xml_to_array->setXml($XML);
    // 当标签名与内置属性有冲突的时候可以自定义相关属性名,一般其概况不需要设置
    //$xml_to_array->setAttributeAsName("attributeAsName")->setContentAsName("contentasName");
    $r = $xml_to_array->parseXml();
    print_r( $r ) ;
}

 

php xml转为xml或者json

标签:

原文地址:http://www.cnblogs.com/walter371/p/4503827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!