说到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数组