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;

    }

}

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

以上是 php数组如何转换为xml的形式? 的全部内容, 来源链接: utcz.com/z/543329.html

回到顶部