<?php

class Xml
{    
    /*
     *  $aData     要格式化的数组
     *  $path      xml信息要写入的文件路径
     *  $version   xml文件的版本信息
     *  $encoding  xml文件信息的编码形式
     *  返回 : false  数组格式不正确
                true   成功
     */
    private $_strEcode;
    public function array2XmlFile ( $aData , $path , $version='1.0' , $encoding = 'GBK')
    {
        $this->_strEcode = $encoding;
        //判断数组格式是否正确
        $bFlag = $this ->checkArray($aData);
        if(!$bFlag)
        {
            return false;    
        }                        
        $xmlDoc = @new DOMDocument( $version , $encoding );
        $xmlDoc -> formatOutput=true;                       
        foreach($aData as $kData => $vData)
        {    
            //声明根节点 upload
            $objRoot = $xmlDoc->createElement ($kData) ;    
            $objRoot = $xmlDoc->appendChild($objRoot);      
            
            //添加根节点属性 icp
            if(is_array($vData))
            {                
                $xmlDoc = $this-> formatXml($vData , $kData , $xmlDoc , $objRoot);  
            }
        }     
        if($xmlDoc-> save($path))
        { //保存路径
            return true;
        }
        else
        {
            return false ;
        }   
                  
    }
    
    /*
     *
     
    */
    public function array2Xmlstring( $aData , $version='1.0' , $encoding = 'GBK')
    {
        $this->_strEcode = $encoding;
        //判断数组格式是否正确
        $bFlag = $this ->checkArray($aData);
        if(!$bFlag)
        {
            return false;    
        }                        
        $xmlDoc = @new DOMDocument( $version , $encoding );
        $xmlDoc -> formatOutput=true;                       
        foreach($aData as $kData => $vData)
        {    
            //声明根节点 upload
            $objRoot = $xmlDoc->createElement ($kData) ;    
            $objRoot = $xmlDoc->appendChild($objRoot);      
            
            //添加根节点属性 icp
            if(is_array($vData))
            {                
                $xmlDoc = $this-> formatXml($vData , $kData , $xmlDoc , $objRoot);  
            }
        }
        
        return $xmlDoc->saveXML();               
    }
        
    private function checkArray($aData)
    {        
        $bIntFlag = false ;
        $bStrFlag = false ;
        $bResult = true;        
        foreach($aData as $k => $v)
        {  
            $strKType = gettype($k);
            if(strcmp($strKType , 'integer') == 0)
            {
                $bIntFlag = true;
            }
            elseif(strcmp($k , "Attribute") != 0)
            {
                $bStrFlag = true;   
            }                 
        }
        if( $bIntFlag  and $bStrFlag)
        {
            return false;
        }            
        else
        {        
            foreach($aData as $kk => $vv)
            {
                if(is_array($vv))
                {
                    $bResult = $this -> checkArray($vv);
                    if(!$bResult)
                    {
                        break;
                    }
                }
            }            
            return $bResult ;
        }
    }
    
    private function formatXml($aData , $kFront , $objDoc , $objFrnDoc , $objStepDoc= null)
    {         
        $nCount = 0;
        foreach( $aData as $kData => $vData)
        {           
            if(is_string($kData))
            {
                $kData = trim( $kData );
            }            
            if(strcmp ( $kData , "Attribute") == 0)
            {
                foreach($vData as $kAttr => $vAttr)
                {
                    $strAttr = $objDoc->createAttribute($kAttr);   //创建节点属性对象实体  
                    $objAttr = $objFrnDoc->appendChild($strAttr);  //把属性添加到节点info中   
                    $objAttr -> appendChild($objDoc->createTextNode($vAttr));        
                }      
            }                                      
            else
            {  
                if(!is_int(($kData)))
                {  
                    $objCurrDoc = $objDoc -> createElement ($kData);
                    $objCurrDoc = $objFrnDoc->appendChild($objCurrDoc);                                                                    
                }
                else
                {   
                    if($nCount == 0)
                    {
                        $objCurrDoc = $objFrnDoc;
                        $nCount ++ ;
                    }
                    else
                    {                 
                        $objCurrDoc = $objDoc -> createElement ($kFront);
                        $objCurrDoc = $objStepDoc->appendChild($objCurrDoc);
                    }
                }
                                
                if(!is_array($vData) )
                {                    
                    if(strcasecmp($this->_strEcode , 'utf-8') == 0)
                    {
                        $objCurrDoc->appendChild($objDoc->createTextNode($vData));
                    }
                    else
                    {
                        //$objCurrDoc->appendChild($objDoc->createTextNode(mb_convert_encoding ($vData ,"UTF-8", "GB2312")));
                        $objCurrDoc->appendChild($objDoc->createTextNode(mb_convert_encoding ($vData ,"UTF-8", "GBK")));
                    }
                }
                else
                {   
                    $objDoc = $this ->formatXml($vData , $kData , $objDoc  , $objCurrDoc , $objFrnDoc);                           
                }
            }           
        }    
        return $objDoc;
    }
        
    /*
     * $objXml xml格式对象
     * 返回 : 对应格式数组
     */
    public function XmlString2Arr($xml)
    {
        if(is_string($xml))
        {
            $xml = simplexml_load_string($xml);
        }
        $aXml = (array) $xml;        
        foreach($aXml as $k => $v)
        {
            if(is_object($v) || is_array($v))
            {
                $aXml[$k] = $this -> XmlString2Arr($v);
            }            
        }
        return $aXml;
    }
       
    
}

php 生成xml文件的更多相关文章

  1. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  2. Java生成XML文件

    我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ...

  3. Android 使用xml序列化器生成xml文件

    在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...

  4. C# 生成xml文件

    本篇文章旨在.net环境下生成xml文件,以控制台应用程序为例进行说明. 1.在vs中新建控制台应用程序CreateXml 2.CreateXmlFile:主要生成xml的函数 public void ...

  5. 视频播放实时记录日志并生成XML文件

    需求描述: 在JWPlayer视频播放过程中,要求实时记录视频观看者播放.暂停的时间,并记录从暂停到下一次播放时所经过的时间.将所有记录保存为XML文件,以方便数据库的后续使用. 实现过程: 尝试1: ...

  6. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  7. LINQ to XML 从逗号分隔值 (CSV) 文件生成 XML 文件

    参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx 本示例演示如何使用 语言集成查询 (LINQ) 和 LINQ to XML 从逗号分隔 ...

  8. 生成XML文件,通过实体生成XML文件

    实体 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xm ...

  9. PHP中的生成XML文件的4种方法(转)

    <?xml version="1.0" encoding="utf-8"?> <article> <item> <ti ...

  10. 使用XMl序列化器生成xml文件

    生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...

随机推荐

  1. Python中pass的用法、作用

    pass主要作用就是占位,让代码整体完整.如果定义一个函数里面为空或一个判断写好了之后还没想好满足条件需要执行执行什么逻辑,又想留着后面使用,但是函数和判断里面为空,那么就会报错,当你还没想清楚函数内 ...

  2. js 浮点数相加 变成字符串 解决方案

    var count = 0; count+=Number(parseFloat(value[i]['sla']).toFixed(2)); 数字相加的时候最好使用Number转换一下

  3. jenkins卡在等待界面解决方法

    1.安装jenkins最新版的时候,发现一直卡在等待界面上 如图显示:   原因:jenkins里面文件指向国外的官网,因为防火墙的原因连不上 解决方法:将配置文件里面的url换成国内的即可  

  4. 区分TCP包的顺序

    确认TCP包的顺序: 使用抓包工具抓包之后,通常按照时间先后排序的,而不是数据的内容逻辑先后.查找内容的先后的关键在于查看TCP中的Sequence number和Acknowledgment num ...

  5. Linux桌面环境安装matlab并创建快捷方式

    安装matlab sudo mkdir -p /mnt/matlab sudo mount -t auto -o loop /home/chris/Downloads/2016b_linux/R201 ...

  6. RabbitMq相关运维

    # 命令查询所有用户列表rabbitmqctl list_users # 使用命令对 xiandian-admin 用户进行授权set_permissions xiandian-admin '.*' ...

  7. CentOS7中Docker-ce的卸载和安装

    一.查看是否已安装了Docker软件包: #查看是否已经安装的Docker软件包sudo yum list installed | grep docker 二.如果已安装不想要的docker/dock ...

  8. 【译】你应该了解的JavaScript数组方法

    让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...

  9. 一起学Hive——详解四种导入数据的方式

    在使用Hive的过程中,导入数据是必不可少的步骤,不同的数据导入方式效率也不一样,本文总结Hive四种不同的数据导入方式: 从本地文件系统导入数据 从HDFS中导入数据 从其他的Hive表中导入数据 ...

  10. md5爆破工具

    http://www.myhack58.com/Article/html/3/8/2015/65021.htm http://xlixli.net/?p=410 http://blog.csdn.ne ...