zoukankan      html  css  js  c++  java
  • php xml转为xml或者json

    <?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= file_get_contents('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 = file_get_contents('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 ) ;
    }

     另外一种简单的方法,待验证

    function xml2arr($xml){
        $obj  = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
        $json = json_encode($obj);
        $arr  = json_decode($json, true);
        return $arr;
    }

    转自:http://www.qaulau.com/php-xml-to-array-class/

    http://www.thinkphp.cn/code/1123.html

  • 相关阅读:
    JQuery增加,替换,删除属性应用
    JQuery选择器
    响应式布局
    在 macOS 下备份/还原/重置 LaunchPad 布局
    使用 C# 和 OpenGL (SharpGL) 实现的一个简易画图版
    深入理解计算机系统 (CS:APP)
    深入理解计算机系统 (CS:APP) Lab2
    深入理解计算机系统 (CS:APP) 缓冲区漏洞实验 – Buffer Lab 解析
    ECNU 计算机系统 (CSAPP) 教材习题作业答案集
    计算机网络 Computer Networks​ 期末复习总提纲
  • 原文地址:https://www.cnblogs.com/walter371/p/4503827.html
Copyright © 2011-2022 走看看