`
nakupanda
  • 浏览: 410052 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

将XML转为数组结构的函数

    博客分类:
  • php
阅读更多
此方法要求传入一个节点(DOMNode),返回该节点下的所以子节点组成的数组。
比如一个XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<files>
	<file>
    	<filename>file1.txt</filename>
        <createdate>2009-09-07</createdate>
        <modifytrack>
        	<date>2009-09-08</date>
        </modifytrack>
    </file>
	<file>
    	<filename>file2.txt</filename>
        <createdate>2009-09-01</createdate>
        <modifytrack>
        	<date>2009-09-04</date>
        </modifytrack>
    </file>
	<file>
    	<filename>file3.txt</filename>
        <createdate>2009-09-01</createdate>
        <modifytrack>
        	<date>2009-09-02</date>
            <date>2009-09-03</date>
            <date>2009-09-04</date>
            <date>2009-09-05</date>
        </modifytrack>
    </file>        
</files>


调用:
$xmlArray = getTreeArray($doc->getElementsByTagName("files")->item(0));
print_r($xmlArray);

将得到
Array ( [file] => Array ( [0] => Array ( [filename] => Array ( [0] => file1.txt ) [createdate] => Array ( [0] => 2009-09-07 ) [modifytrack] => Array ( [0] => Array ( [date] => Array ( [0] => 2009-09-08 ) ) ) ) [1] => Array ( [filename] => Array ( [0] => file2.txt ) [createdate] => Array ( [0] => 2009-09-01 ) [modifytrack] => Array ( [0] => Array ( [date] => Array ( [0] => 2009-09-04 ) ) ) ) [2] => Array ( [filename] => Array ( [0] => file3.txt ) [createdate] => Array ( [0] => 2009-09-01 ) [modifytrack] => Array ( [0] => Array ( [date] => Array ( [0] => 2009-09-02 [1] => 2009-09-03 [2] => 2009-09-04 [3] => 2009-09-05 ) ) ) ) ) ) 

此函数适用于任何深度结构


函数代码
function getTreeArray($targetNode){
	$array = array();
	$targetNodeChildren = $targetNode->childNodes;
	foreach ($targetNodeChildren as $targetChildNode){
		if ($targetChildNode->nodeName!='#text'){
			if ($targetChildNode->childNodes->length>1){
				$array[$targetChildNode->nodeName][] = getTreeArray($targetChildNode);
			}
			else{
				$array[$targetChildNode->nodeName][] = $targetChildNode->nodeValue;
			}
		}
	}
	return $array;
}
分享到:
评论

相关推荐

    parseLabviewXML:此函数将使用 LabVIEW:trade_mark: 软件创建的 XML 文件转换为 MATLAB:registered: 结构体数组。-matlab开发

    该函数将使用“Flatten To XML”和“Write to XML File”VI 创建的 XML 文件转换为结构数组,使用控件/变量的名称作为结构中的字段名称。 它支持读取簇、数组、布尔值、时间戳、枚举、整数、定点数、浮点数、字符串...

    struct2xml:将 MATLAB 结构体转换为 XML 文件。-matlab开发

    此函数将 MATLAB 结构体转换为 XML 文件。

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    2.6.5 ROMAN——将阿拉伯数字转为文本型罗马数字 113 2.6.6 ARABIC——将罗马数字转换为阿拉伯数字 114 2.6.7 BASE——将一个数转换为给定基数的文本格式 115 2.6.8 DECIMAL——将给定基数的文本转换为十进制数 ...

    el函数,el,el表达式,el函数,fn

    15.fn:escapeXml 把一些字符转成XML表示,例如 &lt;字符应该转为${fn:escapeXml(param:info)} 16.fn:indexOf 子字符串在母字符串中出现的位置 ${fn:indexOf(name, "-")} 17.fn:join 将数组中的数据联合成一个新字符串...

    《Excel应用大全》示例文件 光盘文件

    • 将二维数组按列转换为一维数组 • 数组公式实现单条件求和 • 计算一周中内存采购的平均价格 • 统计各品牌的商品销量汇总 • 利用COUNT函数代替SUM 函数统计不重复记录 • 标识零件规格号中的非法数据 • 将中文...

    Python Cookbook

    17.6 用PySequence_Fast将Python序列转为 C数组 604 17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18...

    PHP微信支付WxPayPubHelper

    * 作用:将xml转为array */ public function xmlToArray($xml) { //将XML转为array $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); ...

    ASP.NET编程之道.part1.rar

    细节35 将字符串转为字符数组 细节36 将字符数组写入到字符串 细节37 使用var创建隐型局部变量 细节38 Lambda表达式 细节39 生成缩略图的方法 细节40 使用缓冲流 …… 第6章 必知必会的28个ADO.NET、XML及LINQ方面的...

    C#基础类库

    4.视频格式转为Flv 5.生成Flv视频的缩略图 6.转换文件并保存在指定文件夹下 7.转换文件并保存在指定文件夹下 8.运行mencoder的视频解码器转换 复制代码 21.随机数类 BaseRandom 1.产生随机字符 2.产生随机数 3.在...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例098 将位图转为GIF图标 实例099 图片的平滑缩放 3.6 图像的剪切与合成 实例100 图像的剪切 实例101 图像的合成 3.7 图像识别 实例102 获取鼠标任意位置的颜色值 实例103 提取图片中的对象 实例104 手写...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例098 将位图转为GIF图标 实例099 图片的平滑缩放 3.6 图像的剪切与合成 实例100 图像的剪切 实例101 图像的合成 3.7 图像识别 实例102 获取鼠标任意位置的颜色值 实例103 提取图片中的对象 实例104 手写...

    C#基类库(苏飞版)

    4.视频格式转为Flv 5.生成Flv视频的缩略图 6.转换文件并保存在指定文件夹下 7.转换文件并保存在指定文件夹下 8.运行mencoder的视频解码器转换 复制代码 21.随机数类 BaseRandom 1.产生随机字符 2.产生随机数 3.在...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    8. 得到一浮点数小数点后4位,如何写以函数截取为两位 9. 整型转字符? 10. 显示数据库的记录,点击哪个标题栏,就按照哪个标题排序 11. 制作两个按钮 12. 用什么sql语句将数据库中的一条记录,复制为两条? 13. 有兩個...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    cc实例096 显示JPG图片 3.5 图形转换与缩放 cc实例097 将位图转换为 JPG cc实例098 将位图转为GIF图标 cc实例099 图片的平滑缩放 3.6 图像的剪切与合成 cc实例100 图像的剪切 cc实例101 图像的合成 ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例098 将位图转为GIF图标   cc实例099 图片的平滑缩放   3.6 图像的剪切与合成   cc实例100 图像的剪切   cc实例101 图像的合成  3.7 图像识别   cc实例102 获取鼠标任意位置的颜色值   ...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例098 将位图转为GIF图标   cc实例099 图片的平滑缩放   3.6 图像的剪切与合成   cc实例100 图像的剪切   cc实例101 图像的合成  3.7 图像识别   cc实例102 获取鼠标任意位置的颜色值   ...

    freemarker总结

    节点变量表示为树型结构中的一个节点,通常在XML处理中使用。 在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“B...

    jsp编程技巧集锦

    得到一浮点数小数点后4位,如何写以函数截取为两位 9. 整型转字符? 10. 显示数据库的记录,点击哪个标题栏,就按照哪个标题排序 11. 制作两个按钮 12. 用什么sql语句将数据库中的一条记录,复制为两条?...

    精易模块[源码] V5.15

    将原来的函数分割为:“写入键值Ex_数值”和“写入键值Ex_文本”。 3、修正“注册表操作Ex”不支持“#HKEY_CURRENT_USER”的BUG,感谢易友【pp25729391】反馈并帮助测试。 4、新增“注册表操作Ex-&gt;写QWORD_64值”...

Global site tag (gtag.js) - Google Analytics