首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >simpleXML脚本

simpleXML脚本
EN

Stack Overflow用户
提问于 2011-07-02 21:08:48
回答 1查看 185关注 0票数 1

我正在尝试创建一个简单的脚本,该脚本必须将PHP数组转换为XML。但我不能让它工作..当数组只有一个维数,并且有更多维数时,所有节点都附加到"root“节点上时,该脚本工作得很好

代码语言:javascript
复制
#class
    class XML {
        private $root = '<response />';

        function __construct($root=null){
            $this->root = new SimpleXMLElement($root ? $root:$this->root);
        }

        function encode($arr, $node=null){
            $node = $node ? $node:$this->root;
            foreach($arr as $key => $value){
                if(is_array($value)){
                    $this->encode($value, $node->addChild($key));
                }
                else{
                    $node->addChild($key, $value);
                }
            }
        }

        function output(){
            return $this->root->asXML();
        }
    }


#code

    $arr = array(
        'test' => 'noget',
        'hmmm' => 12,
        'arr' => array(
            99 => 'haha',
            'arr2' => array(
                ),
            'dd' => '333'
            )
        );
    print_r($arr);
    require_once '../class/class.XML.php';
    $XML = new XML();
    $XML->encode($arr);
    echo $XML->output();

#output

    Array
    (
        [test] => noget
        [hmmm] => 12
        [arr] => Array
            (
                [99] => haha
                [arr2] => Array
                    (
                    )

                [dd] => 333
            )

    )
    <?xml version="1.0"?>
    <response><test>noget</test><hmmm>12</hmmm><arr/><99>haha</99><arr2/><dd>333</dd></response>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-02 21:18:04

您的代码看起来可以很好地完成您想要它做的事情,但是,您必须更仔细地检查中的可选$node参数:

代码语言:javascript
复制
function encode($arr, $node=null){
    $node = $node ? $node:$this->root;

我可以让它像这样工作:

代码语言:javascript
复制
function encode($arr, $node=null){
    $node = null === $node ? $this->root : $node;

一个空的simplexml元素是false (see the last point in this list),当您添加一个空子元素时,它总是为false,并且您再次添加到根元素中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6557191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档