本文小編為大家詳細介紹“php數組怎么轉換為xml形式”,內容詳細,步驟清晰,細節處理妥當,希望這篇“php數組怎么轉換為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形式”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。