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


















































暂无评论内容