• 技术文章 >PHP >PHP数组

    php数组如何转换为xml的形式?

    小妮浅浅小妮浅浅2021-02-21 15:05:16原创5947

    说到XML很多人对这个语言还是不熟悉的,它表示一种标记语言。在XML语法上,它与HTML类似,但是HTML中的元素是固定的,并且用户可以定制XML标签。对于数组的学习也有一定的积累,那么我们可以把数组转换为XML的形式,在正式开始数组的转换前,可以先对XML进行一些了解。

    1、说明

    XML 是可扩展标记语言(EXtensible Markup Language)。

    XML 是一种很像HTML的标记语言。

    XML 的设计宗旨是传输数据,而不是显示数据。

    XML 标签没有被预定义。您需要自行定义标签。

    XML 被设计为具有自我描述性。

    XML 是 W3C 的推荐标准。

    2、转换实例

    <?php
    namespace Library;
    /**
     * 最外层的当个元素可以自定义标签,内层单个元素统一标签为$defaultSingleOuter
     */
    class XML
    {
        private static $version = "1.0";
        private static $encoding = 'utf-8';
        // 最外层
        private static $outer = '';
        // 最外层属性
        private static $outerAttribut = [];
        // 单个元素的外层
        private static $singleOuter = '';
        // 单个元素外层的属性
        private static $singleOuterAttribut = [];
     
        private static $defaultSingleOuter = 'item';
     
        public function A2XML(array $data)
        {
            $xml = new \XMLWriter();
            $this->begin($xml);
     
            // 写数据
            if (is_numeric(current(array_keys($data)))) {
                foreach ($data as $key => $val) {
                    $this->singleBegin($xml, true);
                    $this->writeElement($xml, $val);
                    $this->singleEnd($xml);
                }
            } else {
                $this->writeElement($xml, $data);
            }
     
            return $this->end($xml);
        }
     
        /**
         * 写数据
         *
         * @param \XMLWriter $xml
         * @param $data
         */
        private function writeElement(\XMLWriter &$xml, $data)
        {
            if (!is_array($data)) {
                $xml->writeElement(self::$defaultSingleOuter, $data);
                return;
            }
            foreach ($data as $key => $val) {
                if (is_numeric($key)) {
                    is_array($val) && $this->singleBegin($xml);
                    $this->writeElement($xml, $val);
                    is_array($val) && $this->singleEnd($xml);
                    continue;
                }
     
                if (is_array($val)) {
                    $xml->startElement($key);
                    $this->writeElement($xml, $val);
                    $xml->endElement();
                    continue;
                }
                $xml->writeElement($key, $val);
            }
        }
     
        /**
         * 开始
         *
         * @param \XMLWriter $xml
         */
        private function begin(\XMLWriter &$xml)
        {
            $xml->openMemory();
            $xml->startDocument(self::$version, self::$encoding);
     
            if (self::$outer) {
                $xml->startElement(self::$outer);
            }
     
            if (self::$outerAttribut) {
                foreach (self::$outerAttribut as $key => $val) {
                    $xml->writeAttribute($key, $val);
                }
            }
        }
     
        /**
         * 结束
         *
         * @param \XMLWriter $xml
         * @return string
         */
        private function end(\XMLWriter $xml)
        {
            if (self::$outer) {
                $xml->endElement();
            }
     
            $xml->endDocument();
     
            header("Content-type: text/xml");
            //取得缓冲区里的xml字符串
            return $xml->outputMemory(true);
        }
     
        /**
         * 单个元素的开始
         *
         * @param \XMLWriter $xml
         * @param bool $first
         */
        private function singleBegin(\XMLWriter $xml, $first = false)
        {
            if ($first) {
                $xml->startElement(self::$singleOuter ?: self::$defaultSingleOuter);
     
                if (self::$singleOuterAttribut) {
                    foreach (self::$singleOuterAttribut as $key => $val) {
                        $xml->writeAttribute($key, $val);
                    }
                }
            } else {
                $xml->startElement(self::$defaultSingleOuter);
            }
        }
     
        /**
         * 单个元素的结束
         *
         * @param \XMLWriter $xml
         */
        private function singleEnd(\XMLWriter $xml)
        {
            $xml->endElement();
        }
     
        public function setVersion($version = 1.0)
        {
            self::$version = $version;
            return $this;
        }
     
        public function setEncoding($encoding = 'utf-8')
        {
            self::$version = $encoding;
            return $this;
        }
     
        public function setOuter($outer = '')
        {
            self::$outer = $outer;
            return $this;
        }
     
        public function setOuterAttribut(array $outerAttribut = [])
        {
            self::$outerAttribut = $outerAttribut;
            return $this;
        }
     
        public function setSingleOuter($singleOuter)
        {
            self::$singleOuter = $singleOuter;
            return $this;
        }
     
        public function setSingleOuterAttribut(array $singleOuterAttribut = [])
        {
            self::$singleOuterAttribut = $singleOuterAttribut;
            return $this;
        }
     
        public function setDefaultSingleOuter($defaultSingleOuter)
        {
            self::$defaultSingleOuter = $defaultSingleOuter;
            return $this;
        }
    }

    以上就是php数组转换为xml形式的方法,可以说xml语言在可扩展标记的功能方面是非常出色的,我们对于数组的使用也是可以进行这方面的转换更多php学习指路:php数组

    专题推荐:php数组
    上一篇:php数组如何进行堆栈的模拟 下一篇:php中get_object_vars()在数组的使用

    相关文章推荐

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网