• 技术文章 >PHP >PHP数组

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

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

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

    1、说明

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

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

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

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

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

    XML 是 W3C 的推荐标准。

    2、转换实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    140

    141

    142

    143

    144

    145

    146

    147

    148

    149

    150

    151

    152

    153

    154

    155

    156

    157

    158

    159

    160

    161

    162

    163

    164

    165

    166

    167

    168

    169

    170

    171

    172

    173

    174

    175

    176

    177

    178

    179

    180

    181

    182

    <?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学习网