加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP数组转换为xml怎样做,具体步骤流程是什么

发布时间:2023-05-30 14:50:24 所属栏目:PHP教程 来源:
导读:这篇文章将为大家详细讲解有关“PHP数组转换为xml怎样做,具体步骤过程是什么”的知识,下文有详细的介绍,小编觉得挺实用的,对大家学习或工作或许有帮助,因此分享给大家做个参考,希望大家阅读完这篇文
这篇文章将为大家详细讲解有关“PHP数组转换为xml怎样做,具体步骤过程是什么”的知识,下文有详细的介绍,小编觉得挺实用的,对大家学习或工作或许有帮助,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
 
说到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;
 
    }
 
}
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!