Php 解析XML文件
2015-10-20 19:47
686 查看
需要解析的xml文件area.xml如下
程序1:
输出结果如下:
#text
humans
#text
areas
#text
分析:
#text 类型是XML_TEXT_NODE,所以需要屏蔽,只有在最内层的结点之间需要
程序2:
输出结果如下:
Array
(
[humans] => Array
(
[zhangying] => Array
(
[name] => 张映2
[sex] => 男
[old] => 28
)
[tank] => Array
(
[name] => tank
[sex] => 男
[old] => 28
)
)
[areas] => Array
(
[beijing] => Array
(
[name] => 北京
[oid] => 1
)
[nanjing] => Array
(
[name] => 南京
[oid] => 2
)
)
)
张映2
分析:
在一层中如果出现两个相同的标签,就会覆盖第一个第一标签:
<name>张映</name>
<name>张映2</name>
程序3:
输出结果如下:
Array
(
[humans] => Array
(
[0] => Array
(
[zhangying] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 张映
[1] => 张映2
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
[tank] => Array
(
[0] => Array
(
[name] => Array
(
[0] => tank
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
)
)
[areas] => Array
(
[0] => Array
(
[beijing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 北京
)
[oid] => Array
(
[0] => 1
)
)
)
[nanjing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 南京
)
[oid] => Array
(
[0] => 2
)
)
)
)
)
)
张映张映2
分析:
发现
<humans type="1" id="1">
的属性没有读取到
程序4:
将结点的属性放到第一个[0]位置
输出结果:
Array
(
[humans] => Array
(
[0] => Array
(
[type] => 1
[id] => 1
[zhangying] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 张映
[1] => 张映2
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
[tank] => Array
(
[0] => Array
(
[name] => Array
(
[0] => tank
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
)
)
[areas] => Array
(
[0] => Array
(
[beijing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 北京
)
[oid] => Array
(
[0] => 1
)
)
)
[nanjing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 南京
)
[oid] => Array
(
[0] => 2
)
)
)
)
)
)
张映
张映2
1
<?xml version="1.0" encoding="utf-8"?> <info> <humans type="1" id="1"> <zhangying> <name>张映</name> <name>张映2</name> <sex>男</sex> <old>28</old> </zhangying> <tank> <name>tank</name> <sex>男</sex> <old>28</old> </tank> </humans> <areas> <beijing> <name>北京</name> <oid>1</oid> </beijing> <nanjing> <name>南京</name> <oid>2</oid> </nanjing> </areas> </info>
程序1:
function getArray($elements) { $arr=array(); if($elements->hasChildNodes()) { foreach($elements->childNodes as $node) { echo $node->nodeName."\n"; } } } $xmlfile="area.xml"; $dom = new DOMDocument(); $dom->load($xmlfile); $elements = $dom->documentElement; print_r(getArray($elements));
输出结果如下:
#text
humans
#text
areas
#text
分析:
#text 类型是XML_TEXT_NODE,所以需要屏蔽,只有在最内层的结点之间需要
程序2:
function getArray($elements) { $arr=array(); if($elements->hasChildNodes() && $elements->childNodes->length!=1) { //$elements->childNodes->length!=1 过滤 #text foreach($elements->childNodes as $node) { if($node->nodeType != XML_TEXT_NODE) { $arr[$node->nodeName]=getArray($node); } } } else { return iconv("UTF-8","GB2312",$elements->nodeValue); } return $arr; } $xmlfile="test.xml"; $dom = new DOMDocument(); $dom->load($xmlfile); $elements = $dom->documentElement; //print_r(getArray($elements)); $arr=getArray($elements); print_r($arr); echo $arr[humans][zhangying][name]; //张映2
输出结果如下:
Array
(
[humans] => Array
(
[zhangying] => Array
(
[name] => 张映2
[sex] => 男
[old] => 28
)
[tank] => Array
(
[name] => tank
[sex] => 男
[old] => 28
)
)
[areas] => Array
(
[beijing] => Array
(
[name] => 北京
[oid] => 1
)
[nanjing] => Array
(
[name] => 南京
[oid] => 2
)
)
)
张映2
分析:
在一层中如果出现两个相同的标签,就会覆盖第一个第一标签:
<name>张映</name>
<name>张映2</name>
程序3:
function getArray($elements) { $arr=array(); if($elements->hasChildNodes() && $elements->childNodes->length!=1) { //$elements->childNodes->length!=1 过滤 #text foreach($elements->childNodes as $node) { if($node->nodeType != XML_TEXT_NODE) { $arr[$node->nodeName][]=getArray($node); #相对程序2的唯一修改的地方 } } } else { return iconv("UTF-8","GB2312",$elements->nodeValue); } return $arr; } $xmlfile="area.xml"; $dom = new DOMDocument(); $dom->load($xmlfile); $elements = $dom->documentElement; //print_r(getArray($elements)); $arr=getArray($elements); print_r($arr); echo $arr[humans][0][zhangying][0][name][0]; //张映 echo $arr[humans][0][zhangying][0][name][1]; //张映2
输出结果如下:
Array
(
[humans] => Array
(
[0] => Array
(
[zhangying] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 张映
[1] => 张映2
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
[tank] => Array
(
[0] => Array
(
[name] => Array
(
[0] => tank
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
)
)
[areas] => Array
(
[0] => Array
(
[beijing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 北京
)
[oid] => Array
(
[0] => 1
)
)
)
[nanjing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 南京
)
[oid] => Array
(
[0] => 2
)
)
)
)
)
)
张映张映2
分析:
发现
<humans type="1" id="1">
的属性没有读取到
程序4:
将结点的属性放到第一个[0]位置
function getArray($elements) { $arr=array(); if($elements->hasAttributes()) { //将属性值放到第一[0]个 foreach ($elements->attributes as $attr) { $arr[$attr->nodeName] = iconv("UTF-8","GB2312",$attr->nodeValue); } } if($elements->hasChildNodes() && $elements->childNodes->length!=1) { //$elements->childNodes->length!=1 过滤 #text foreach($elements->childNodes as $node) { if($node->nodeType != XML_TEXT_NODE) { $arr[$node->nodeName][]=getArray($node); } } } else { return iconv("UTF-8","GB2312",$elements->nodeValue); } return $arr; } $xmlfile="area.xml"; $dom = new DOMDocument(); $dom->load($xmlfile); $elements = $dom->documentElement; //print_r(getArray($elements)); $arr=getArray($elements); print_r($arr); echo $arr[humans][0][zhangying][0][name][0]."\n"; //张映 echo $arr[humans][0][zhangying][0][name][1]."\n"; //张映2 echo $arr[humans][0][type]; //属性type值
输出结果:
Array
(
[humans] => Array
(
[0] => Array
(
[type] => 1
[id] => 1
[zhangying] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 张映
[1] => 张映2
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
[tank] => Array
(
[0] => Array
(
[name] => Array
(
[0] => tank
)
[sex] => Array
(
[0] => 男
)
[old] => Array
(
[0] => 28
)
)
)
)
)
[areas] => Array
(
[0] => Array
(
[beijing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 北京
)
[oid] => Array
(
[0] => 1
)
)
)
[nanjing] => Array
(
[0] => Array
(
[name] => Array
(
[0] => 南京
)
[oid] => Array
(
[0] => 2
)
)
)
)
)
)
张映
张映2
1
相关文章推荐
- php中empty()、isset()、is_null()和变量本身的布尔判断区别
- yii2 操作数据库
- mutt msmtp
- PHP采用自定义函数实现遍历目录下所有文件的方法
- 使用Netperf测试内网
- PhpStorm 注册码
- php 常见的内置函数及用法
- php各种排序
- Yii增删改查
- SCTP
- yii2 advanced版本dev和pro配置
- php 上传文件
- php环境搭建
- PHP的explode和implode的使用说明
- php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
- PHP+MYSQL数据库查询显示
- php调用phpqrcode.php生成二维码
- php常用正则
- php 命令行工具 日志请使用绝对路径
- 现在写 PHP,你应该知道这些