php操作xml的方法
2024-08-29 20:04:31
xml源文件
<?xml version="1.0 encoding="UTF-8"?>
<humans>
<zhangying>
<name>张映</name>
<sex>男</sex>
<old>28</old>
</zhangying>
<tank>
<name>tank</name>
<sex>男</sex>
<old>28</old>
</tank>
</humans>
1)DOMDocument读取xml
<?php
$doc = new DOMDocument();
$doc->load('person.xml'); //读取xml文件
$humans = $doc->getElementsByTagName( "humans" ); //取得humans标签的对象数组
foreach( $humans as $human )
{
$names = $human->getElementsByTagName( "name" ); //取得name的标签的对象数组
$name = $names->item()->nodeValue; //取得node中的值,如<name> </name>
$sexs = $human->getElementsByTagName( "sex" );
$sex = $sexs->item()->nodeValue;
$olds = $human->getElementsByTagName( "old" );
$old = $olds->item()->nodeValue;
echo "$name - $sex - $old\n";
}
?>
2)simplexml读取xml
<?php
$xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中
foreach($xml_array as $tmp){
echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>";
}
?>
3)用php正则表达式来记取数据
<?php
$xml = "";
$f = fopen('person.xml', 'r');
while( $data = fread( $f, 4096 ) ) {
$xml .= $data;
}
fclose( $f );
// 上面读取数据
preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans ); //匹配最外层标签里面的内容
foreach( $humans[1] as $k=>$human )
{
preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name ); //匹配出名字
preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex ); //匹配出性别
preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄
}
foreach($name[1] as $key=>$val){
echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ;
}
?>
4)xmlreader来读取xml数据
<?php
$reader = new XMLReader();
$reader->open('person.xml'); //读取xml数据
$i=;
while ($reader->read()) { //是否读取
if ($reader->nodeType == XMLReader::TEXT) { //判断node类型
if($i%){
echo $reader->value; //取得node的值
}else{
echo $reader->value."<br>" ;
}
$i++;
}
}
?>
三,小结
读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,张映.但是他们的测重点不同,前三种方 法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他 的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就 不想在搞xml文件出来了)。
举个例子解释一下,
<data name=’张映’ sex=’男’ old=’28′></data>
xmlreader的设计重点是为了读data里面的name sex old的值,而读取的内容就比较麻烦了。他相当于jquery中attr(”);这个东西。
上面纯属个人看法,请大家指正。希望对大家有帮助。
最新文章
- 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)
- JSP实现 乘法口诀输出
- spring+hibernate实体类注解详解(非原创) + cascade属性取值
- jq选择器 第一部分
- git 仓库
- 55 Jump Game i &;&; 45 Jump Game ii
- 一道简单的CTF登录题题解
- c# 中的封装、继承、多态详解
- 如何查看jar包的版本号?(转)
- nodejs的某些api~(三)net模块
- Bootstrap3基础 table-striped 表格实现隔行换色(浅灰色与白色交替)
- 【软件安装】nvidia驱动安装事宜
- eclipse导入项目文件以及 import项目文件后有个红色感叹号
- 二、持久层框架(Hibernate)
- Unity3D笔记五 快捷键
- hdu2177威佐夫博弈
- Java内存管理笔记
- Oracle 获取数据最新版本
- iOS通知传值
- 微信 oauth2 两次回调
热门文章
- 【LeetCode】Remove Nth Node From End of List(删除链表的倒数第N个节点)
- CoCoS 2D-JS的开发环境搭建
- php删除
- LeetCode--二分查找相关算法
- SPOJ QTREE Query on a tree ——树链剖分 线段树
- SpringBoot消失的Web.xml
- 二分图最小覆盖的Konig定理及其证明,最小的覆盖证明
- Aragorn&#39;s Story(hdu3966)
- 16.1116 NOIP 考前模拟(信心题)
- AtCoder Regular Contest 074F - Lotus Leaves