PHP中simpleXML递归实现XML文件与数组的相互转化(原创)
发布日期:2021-06-29 14:55:50 浏览次数:3 分类:技术文章

本文共 3124 字,大约阅读时间需要 10 分钟。

 一、XML文件转换为数组

<?php

/*******************************************************/

//simpleXML  解析XML文件非常简单

//因为它一次性把XML文件解析成一个大对象 

//来个简单的实例

/************************************************

 //从文件载入XML文档

//$simxml  =  simplexml_load_file('book.xml');

//print_r($simxml);

//echo $simxml->book[1]->title;

//查看bokstore下面有几本书

//echo '有',$simxml->count(),"本书";

//echo  $simxml -> asXML (); 

/*

//利用simplexml对象把xml文件转换成数组

//对象           用属性名->属性值            存储变量

//数组用键名->键值存储变量

//二者区别不大,js中可直接看成关联数组来操作

$simxml = simplexml_load_file('book.xml');

/*

print_r($simxml);

echo "<br/>";

//类型的强制转换

print_r(array($simxml));

 */

//写一个函数,递归把simpleXML对象转成数组

//思路:先把最外层对象转成数组,再循环转换

//某个单元只要还是对象,就继续调用自身来转换

 

function xml2arr($sim){

$arr = (array)$sim;

foreach($arr as $k=>$v){

if($v instanceof simplexmlelement || is_array($v)){   //判断是否为 simplexml 对象 或者 数组

$arr[$k] = xml2arr($v);

}

}

return $arr;

}

print_r($xmlarr = xml2arr($simxml));

echo $xmlarr['book']['1']['title'];        //此时,便可直接对数组操作

 

?>

附上 我的 book.xml 内容:

<?xml version="1.0" encoding="utf-8"?>

<bookstore>

    <book category="COOKING">

            <title lang="en">Everyday Italian</title>

            <author>Giada De Laurentis</author>

            <year>2005</year>

            <price>30</price>

    </book>

    <book category="武侠">

            <title lang="中文">侠客行</title>

            <author>金庸</author>

            <year>2005</year>

            <price>29.9</price>

    </book>

    <book category="网页">

            <title lang="中文">PHP7日通</title>

            <author>Lover雪</author>

            <year>2003</year>

            <price>30.99</price>

    </book>

            <book category="小说">

            <title lang="en">离歌</title>

            <author>美女作家</author>

            <year>2001</year>

            <price>49.99</price>

    </book>

</bookstore>

 

 二、数组转换为XML文件
废话不多说,先从简单的一维数组开始:
(1)、一维数组转换为xml
        

<?php

//一维数组转成XML

//************************************************

//一维数组转为xml

//*************************************************

//思路:循环数组中每个单元,加入到xml文档节点中

$arr = array(

        'name'=>"lover雪",

        'content'=>"我喜欢雪",

);

function arr2xml($arr){

        //直接传值字符串

        $simxml = new simpleXMLElement('<?xml version="1.0" encoding="utf-8" ?><root></root>');

        foreach($arr as $k=>$v){

                $simxml->addChild($k,$v);

        }

        return $simxml->saveXML();

}

header('content-type: text/xml');

echo ($str = arr2xml($arr));

file_put_contents('./01.xml',$str);

 

?>

 

 接下来,我们在上面的代码中进行改变,用于多维数组

(2)、多维数组转换为xml

 

<?php

//多维数组转为xml

//思路:循环数组中每个单元,加入到xml文档节点中

$arr = array(

        'name'=>"lover雪",

        'content'=>"我喜欢雪",

        'job'=>array(

                'title'=>'经理',

                'salary'=>8888,

                'team'=>array("lover雪","silence",'hurts')

        )

);

function arr2xml($arr,$node=NULL){

        //直接传值字符串

        if(is_null($node))

                $simxml = new simpleXMLElement('<?xml version="1.0" encoding="utf-8" ?><root></root>');

        else

                $simxml = $node;

        foreach($arr as $k=>$v){            //若是数组

                if(is_array($v)){

                        arr2xml($v,$simxml->addChild($k));

                }else if(is_numeric($k)){       //若节点名为数字,由于xml的标签不得有数字开头

                        $simxml->addChild('item'.$k, $v);

                }else{              //是字符串//if(is_scalar($v))//标量类型:bool  float  interage string

                        $simxml->addChild($k,$v);

                }

        }

        return $simxml->saveXML();

}

header('content-type: text/xml');

echo ($str = arr2xml($arr));

file_put_contents('./01.xml',$str);

?>

 

 

上面的代码中个,在ar2xml中,首先在参数中,增加一个$node节点,作为当$arr为数组时的根节点使用,

若传入的$node 为空的话,则说明暂时还没有根节点,此事我们可以创建一个根节点,
否则,直接将后面创建的节点加入作为$node的子节点,
分三种情况进行讨论,分别是数组,数字,所有标量类型。
之所以单独把数字进行分类讨论,是因为,在xml中,标签是不可以以数字开头。 

 

 

 

 

 

 

 

 

 

结果图如下:

最后将内容全部写入文件,此时会在当前目录下创建01.XML 文件。

 

 

 

 

图片
 

转载地址:https://ciellee.blog.csdn.net/article/details/82599447 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Ajax快速入门
下一篇:PHP实现HTTP的POST与GET 类

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月04日 20时20分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章