ThinkPHP源码学习 xml_encode函数 数据转成xml格式

/**
 * XML编码
 * @param mixed $data 数据
 * @param string $root 根节点名
 * @param string $item 数字索引的子节点名
 * @param string $attr 根节点属性
 * @param string $id   数字索引子节点key转换的属性名
 * @param string $encoding 数据编码
 * @return string
 */

function xml_encode($data, $root=‘think‘, $item=‘item‘, $attr=‘‘, $id=‘id‘,$encoding=‘utf-8‘) {
    if(is_array($attr)){
        $_attr = array();
        foreach ($attr as $key => $value) {
            $_attr[] = "{$key}=\"{$value}\"";
        }
        $attr = implode(‘ ‘, $_attr);//implode — 将一个一维数组的值转化为字符串
    }
    $attr   = trim($attr);
    $attr   = empty($attr) ? ‘‘ : " {$attr}";
    $xml    = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";//  \"  表示转义双引号
    $xml   .= "<{$root}{$attr}>";//$attr根节点属性
    $xml   .= data_to_xml($data, $item, $id);
    $xml   .= "</{$root}>";
    return $xml;
}
function data_to_xml($data, $item=‘item‘, $id=‘id‘) {
    $xml = $attr = ‘‘;
    foreach ($data as $key => $val) {
        if(is_numeric($key)){
            $id && $attr = " {$id}=\"{$key}\"";
            $key  = $item;
        }
     $xml    .=  "<{$key}{$attr}>";
     $xml  .=  (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : $val;
     $xml    .=  "</{$key}>";
    }
    return $xml;
}
$data = array(
    ‘note‘=>array(
        ‘from‘=>‘liming‘,
        ‘to‘=>‘xiaowang‘,
        ‘message‘=>‘hello,world!‘
    )
);
$a=xml_encode($data);
var_dump($a);

执行结果为:

string ‘<?xml version="1.0" encoding="utf-8"?>
        <think>
           <note>
               <from>liming</from>
               <to>xiaowang</to>
               <message>hello,world!</message>
            </note>
         </think>‘ (length=133)

注意:结果格式手动调整一下,方便阅读!

时间: 2024-08-03 07:59:09

ThinkPHP源码学习 xml_encode函数 数据转成xml格式的相关文章

ThinkPHP源码学习 data_to_xml函数 数据转成xml格式

/** * 数据XML编码 * @param mixed  $data 数据 * @param string $item 数字索引时的节点名称 * @param string $id   数字索引key转换为的属性名 * @return string */ function data_to_xml($data, $item='item', $id='id') {     $xml = $attr = '';     foreach ($data as $key => $val) {       

ThinkPHP源码学习 cookie函数 设置 取值 删除

/** * Cookie 设置.获取.删除 * @param string $name cookie名称 * @param mixed $value cookie值 * @param mixed $option cookie参数 * @return mixed */ 系统内置了一个cookie函数用于支持和简化Cookie的相关操作,该函数可以完成Cookie的设置.获取.删除操作. Cookie设置 cookie('author','津沙港湾','3600'); 执行代码段 $expire =

ThinkPHP源码学习---is_ssl() 函数 判断是否SSL协议

/** * 判断是否SSL协议 * @return boolean */ function is_ssl() { if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] ||     'on' == strtolower($_SERVER['HTTPS']))){         return true;     }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == 

ThinkPHP源码学习 redirect函数 URL重定向

/**  * URL重定向  * @param string $url 重定向的URL地址  * @param integer $time 重定向的等待时间(秒)  * @param string $msg 重定向前的提示信息  * @return void  */  $url='http://www.baidu.com';  $time=3; function redirect($url, $time=0, $msg='') { //多行URL地址支持     $url        = st

ThinkPHP源码学习 to_guid_string函数 根据PHP各种类型变量生成唯一标识号

/** * 根据PHP各种类型变量生成唯一标识号 * @param mixed $mix 变量 * @return string */ function to_guid_string($mix) {     if (is_object($mix)) {         return spl_object_hash($mix); //spl_object_hash - 返回指定对象的hash id      } elseif (is_resource($mix)) { //is_resource 

ThinkPHP源码阅读2-----C函数配置文件详解

ThinkPHP的配置非常灵活,可自定义加载.大概看了一下,一共有这几个地方会加载配置文件,方便以后的读取 /** * 获取和设置配置参数 支持批量定义 * * @param string|array $name * 配置变量 * @param mixed $value * 配置值 * @return mixed */ function C($name = null, $value = null) { static $_config = array (); // 无参数时获取所有 if (emp

THINKPHP源码学习--------验证码类

TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.php 首先分段来阅读源码 1.namespace Think; Class Verify表示Thinkphp命名空间下的Verify类 2. protected $config = array( 'seKey'    => 'ThinkPHP.CN', // 验证码加密密钥 'codeSet'  =

async源码学习 - waterfall函数的使用及原理实现

waterfall函数会连续执行数组中的函数,每次通过数组下一个函数的结果.然而,数组任务中的任意一个函数结果传递失败,那么该函数的下一个函数将不会执行,并且主回调函数立马把错误作为参数执行. 以上是我翻译的,我都不知道翻译的什么鬼. 其实该函数的作用就是: 上一个异步函数返回结果可以传给下一个异步函数,如果传递过程中,第一个参数出错了也就是真值的话,下一个回调函数将会停止调用,并且直接调用waterfall函数的第二个参数,其实也是个回调函数.并且把错误的参数传过去. 先看看官网的demo:

Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类

Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何实现的. 提前申明,本人是一直搞.net的,对java略为生疏,所以在学习该作品时,会时不时插入对java的学习,到时也会摆一些上来,包括一下设计模式之类的.欢迎高手指正. 整个学习过程,我们主要通过eclipse来学习,之前已经讲过如何在eclipse中搭建调试环境,这里就不多述了. 在之前源码初