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

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

1、说明

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

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

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

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

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

XML 是 W3C 的推荐标准。

2、转换实例

<?php
namespaceLibrary;
/**
*最外层的当个元素可以自定义标签,内层单个元素统一标签为$defaultSingleOuter
*/
classXML
{
privatestatic$version="1.0";
privatestatic$encoding='utf-8';
//最外层
privatestatic$outer='';
//最外层属性
privatestatic$outerAttribut=[];
//单个元素的外层
privatestatic$singleOuter='';
//单个元素外层的属性
privatestatic$singleOuterAttribut=[];

privatestatic$defaultSingleOuter='item';

publicfunctionA2XML(array$data)
{
$xml=new\XMLWriter();
$this->begin($xml);

//写数据
if(is_numeric(current(array_keys($data)))){
foreach($dataas$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
*/
privatefunctionwriteElement(\XMLWriter&$xml,$data)
{
if(!is_array($data)){
$xml->writeElement(self::$defaultSingleOuter,$data);
return;
}
foreach($dataas$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
*/
privatefunctionbegin(\XMLWriter&$xml)
{
$xml->openMemory();
$xml->startDocument(self::$version,self::$encoding);

if(self::$outer){
$xml->startElement(self::$outer);
}

if(self::$outerAttribut){
foreach(self::$outerAttributas$key=>$val){
$xml->writeAttribute($key,$val);
}
}
}

/**
*结束
*
*@param\XMLWriter$xml
*@returnstring
*/
privatefunctionend(\XMLWriter$xml)
{
if(self::$outer){
$xml->endElement();
}

$xml->endDocument();

header("Content-type:text/xml");
//取得缓冲区里的xml字符串
return$xml->outputMemory(true);
}

/**
*单个元素的开始
*
*@param\XMLWriter$xml
*@parambool$first
*/
privatefunctionsingleBegin(\XMLWriter$xml,$first=false)
{
if($first){
$xml->startElement(self::$singleOuter?:self::$defaultSingleOuter);

if(self::$singleOuterAttribut){
foreach(self::$singleOuterAttributas$key=>$val){
$xml->writeAttribute($key,$val);
}
}
}else{
$xml->startElement(self::$defaultSingleOuter);
}
}

/**
*单个元素的结束
*
*@param\XMLWriter$xml
*/
privatefunctionsingleEnd(\XMLWriter$xml)
{
$xml->endElement();
}

publicfunctionsetVersion($version=1.0)
{
self::$version=$version;
return$this;
}

publicfunctionsetEncoding($encoding='utf-8')
{
self::$version=$encoding;
return$this;
}

publicfunctionsetOuter($outer='')
{
self::$outer=$outer;
return$this;
}

publicfunctionsetOuterAttribut(array$outerAttribut=[])
{
self::$outerAttribut=$outerAttribut;
return$this;
}

publicfunctionsetSingleOuter($singleOuter)
{
self::$singleOuter=$singleOuter;
return$this;
}

publicfunctionsetSingleOuterAttribut(array$singleOuterAttribut=[])
{
self::$singleOuterAttribut=$singleOuterAttribut;
return$this;
}

publicfunctionsetDefaultSingleOuter($defaultSingleOuter)
{
self::$defaultSingleOuter=$defaultSingleOuter;
return$this;
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容