PHP中将数组转成XML格式的实现代码

   2015-11-13 0
核心提示:网上找的一段代码! 然后我自己根据php DOMDocument又写了一段代码,需要的朋友可以参考下。
下面是网上的
复制代码 代码如下:

class ArrayToXML
{
/**
* The main function for converting to an XML document.
* Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.
*
* @param array $data
* @param string $rootNodeName - what you want the root node to be - defaultsto data.
* @param SimpleXMLElement $xml - should only be used recursively
* @return string XML
*/
public static function toXml($data, $rootNodeName = 'data', $xml=null)
{
// turn off compatibility mode as simple xml throws a wobbly if you don't.
if (ini_get('zend.ze1_compatibility_mode') == 1)
{
ini_set ('zend.ze1_compatibility_mode', 0);
}
if ($xml == null)
{
$xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
}
// loop through the data passed in.
foreach($data as $key => $value)
{
// no numeric keys in our xml please!
if (is_numeric($key))
{
// make string key...
$key = "unknownNode_". (string) $key;
}
// replace anything not alpha numeric
$key = preg_replace('/[^a-z]/i', '', $key);
// if there is another array found recrusively call this function
if (is_array($value))
{
$node = $xml->addChild($key);
// recrusive call.
ArrayToXML::toXml($value, $rootNodeName, $node);
}
else
{
// add single node.
$value = htmlentities($value);
$xml->addChild($key,$value);
}
}
// pass back as string. or simple xml object if you want!
return $xml->asXML();
}
}

下面是我编辑过的代码
复制代码 代码如下:

function arrtoxml($arr,$dom=0,$item=0){
if (!$dom){
$dom = new DOMDocument("1.0");
}
if(!$item){
$item = $dom->createElement("root");
$dom->appendChild($item);
}
foreach ($arr as $key=>$val){
$itemx = $dom->createElement(is_string($key)?$key:"item");
$item->appendChild($itemx);
if (!is_array($val)){
$text = $dom->createTextNode($val);
$itemx->appendChild($text);
}else {
arrtoxml($val,$dom,$itemx);
}
}
return $dom->saveXML();
}

数组转换成XML格式
复制代码 代码如下:

<?
$elementLevel = 0 ;
function array_Xml($array, $keys = '')
{
global $elementLevel;
if(!is_array($array))
{
if($keys == ''){
return $array;
}else{
return "\n<$keys>" . $array . "</$keys>";
}
}else{
foreach ($array as $key => $value)
{
$haveTag = true;
if (is_numeric($key))
{
$key = $keys;
$haveTag = false;
}
/**
* The first element
*/
if($elementLevel == 0 )
{
$startElement = "<$key>";
$endElement = "</$key>";
}
$text .= $startElement."\n";
/**
* Other elements
*/
if(!$haveTag)
{
$elementLevel++;
$text .= "<$key>" . array_Xml($value, $key). "</$key>\n";
}else{
$elementLevel++;
$text .= array_Xml($value, $key);
}
$text .= $endElement."\n";
}
}
return $text;
}
?>

函数描述及例子
复制代码 代码如下:

<?
$array = array(
"employees" => array(
"employee" => array(
array(
"name" => "name one",
"position" => "position one"
),
array(
"name" => "name two",
"position" => "position two"
),
array(
"name" => "name three",
"position" => "position three"
)
)
)
);
echo array_Xml($array);
?>
 
标签: 数组 XML
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Swift数组的加法运算符用法:array1 += array2
    var stringList1 = [String]()//创建String类型空数组var stringList2 = ["1", "3", "5", "7", "zoo", "9","zoo"]var stringList3 :[String] = ["2", "4", "6","apple&q
    02-09
  • ">C# 使用SIMD向量类型加速浮点数组求和运算(1
    作者: 目录一、缘由二、使用向量类型2.1 基本算法2.2 使用大小固定的向量(如 Vector4)2.2.1 介绍2.2.2 用Vector4编写浮点数组求和函数2.3 使用大小与硬件相关的向量(如 VectorT)2.3.1 介绍2.2.1.1 使用经验2.3.2 用 VectorT 编写浮点数组求和函数三、搭
    02-09
  • 一个把String转成byte数组的小程序 java string
    来源:http://www.study-code.com/java/j2se/66420.htm /**@类功能:将一个文件中的String声明转换成byte[] 声明***@作者:关文柏*@时间:2006年11月11日*///---------------------------------------------------------------////NOTE: Make sure the identifi
    02-09
  • 【Rust】字节数组 rust 字符串
    环境Rust 1.56.1VSCode 1.61.2概念参考:https://doc.rust-lang.org/rust-by-example/std/str.html示例在字符串前加上一个 b 来表示。main.rsuse std::str;fn main() {let bytestring = b"this is a byte string";println!("A byte string: {:?}", bytestring
    02-09
  • 【小实验】rust的数组是在堆上分配还是在栈上分
    先看代码: fn main(){ let v = [1,2,3,4,5]; let addr = v[0] as *const i32 as usize;println!("arr={}, addr=0x{:X}", v.len(), addr); // let top = 1; let addr1 = top as *const i32 as usize; println!("stack top:0x{:X}", addr1);}编译:rustc array
    02-09
  • 【Rust】可变数组 rust二维数组
    环境Rust 1.56.1VSCode 1.61.2概念参考:https://doc.rust-lang.org/rust-by-example/std/vec.html示例可变数组(Vector)存储在堆上和普通数组的区别是长度可变。main.rsfn main() {let collected_iterator: Veci32 = (0..10).collect();println!("Collected
    02-09
  • Rust 旋转数组
    经典三旋转:旋转数组经典算法就是三旋转先整体旋转之后在局部旋转需要注意 求余运算,超过数组长度后要取余数后在旋转如:[1,2,3,4,5,6,7]  3     [7,6,5,4,3,2,1]  整体旋转     [5,6,7,4,3,2,1]  [..k] 旋转     [5,6,7,1,2,3,4]  [k..]
    02-09
  • Delphi 的内存操作函数1-2: 给数组指针分配内存
    GetMemAllocMemReallocMemFreeMemGetMemoryReallocMemoryFreeMemoryNewDisposeNewStrDisposeStrStrNewStrAllocStrDisposeGlobalAllocPtrGlobalFreePtrWideStrAllocAnsiStrAllocStrDisposeMoveMoveMemoryCopyMemoryZeroMemoryFillMemoryFillCharStrBufSize给字
    02-09
  • Delphi 变体数组 Dataset Locate 查找定位
    Format 函数 Delphi 支持“开参数”和动态数组,变体数组,使用时的语法类似 Delphi 中的集合:采用两个方括号把不同类型的变量括起来(这太方便了啊),也可以采用声明一个 TVarRec 类型的数组来容纳不同的类型变量(具体请参阅其帮助文档)Format函数声明比
    02-09
  • Delphi指针总结 delphi 数组指针
    看一个指针用法的例子:      1          var      2              X,    Y:    Integer;        //    X    and    Y    整数类型      3              P:    ^Integer;  
    02-09
点击排行