PHP读取XML值的代码(推荐)


Posted in PHP onJanuary 01, 2011

用Php读取XML最简单的情况:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</xml>

Php文件(cy.php)如下:
<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
foreach($xml->getElementsByTagName('list') as $list) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
?>

cy.php的运行结果:
1
2
3

=============

用Php读取XML稍微复杂一点的情况:

cy.xml如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<main> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
</xml>

cy.php如下(和第一种情况没有任何变化):
<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
foreach($xml->getElementsByTagName('list') as $list) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
?>

cy.php的运行结果和第一次也相同:
1
2
3

Php读取XML第三种情况:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<main> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
<main> 
<list>4</list> 
<list>5</list> 
<list>6</list> 
</main> 
</xml>

Php文件(cy.php)如下(和第一次依然没有变化):
<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
foreach($xml->getElementsByTagName('list') as $list) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
?>

cy.php的输出结果:
1
2
3
4
5
6

===========

Php读取XML第四种情况,保持cy.xml不变,改变cy.php:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<main> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
<main> 
<list>4</list> 
<list>5</list> 
<list>6</list> 
</main> 
</xml>

Php文件(cy.php)如下:
<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
$main = $xml->getElementsByTagName('main'); 
foreach( $main as $main) 
{ 
$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
} 
?>

cy.php输出结果:
1
2
3
4
5
6

为什么两次的cy.php不同,但输出结果是相同的?让我们来看下一个例子

==============

Php读取XML第五种情况,改变cy.xml,使cy.php保持第四种情况:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> <main> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
<main> 
<list>4</list> 
<list>5</list> 
<list>6</list> 
</main> 
<m> 
<list>7</list> 
<list>8</list> 
<list>9</list> 
</m> 
</xml>

Php文件(cy.php)和第四种情况相同:
<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
$main = $xml->getElementsByTagName('main'); 
foreach( $main as $main) 
{ 
$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
} 
?>

cy.php输出结果为:
1
2
3
4
5
6

为什么
<m>
<list>7</list>
<list>8</list>
<list>9</list>
</m>
中的7,8,9没有被读出来?
因为我们的cy.php只读取<main></main>标记中的内容.<m></m>标记中的内容是不会被读取的.
我们这里所提到的”标记”,在XML里被称做”节点”;
关于”节点”的相关概念,我们将在以后说明.

Php读取XML情况六,再foreach一次,我们把7,8,9读出来!:

XML文件(cy.xm)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<main> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
<main> 
<list>4</list> 
<list>5</list> 
<list>6</list> 
</main> 
<m> 
<list>7</list> 
<list>8</list> 
<list>9</list> 
</m> 
</xml>

Php文件(cy.php)如下:
<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
$main = $xml->getElementsByTagName('main'); 
foreach( $main as $main) 
{ 
$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
} 
$m = $xml->getElementsByTagName('m'); 
foreach( $m as $m) 
{ 
$list = $m->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
} 
?>

cy.php输出结果:
1
2
3
4
5
6
7
8
9

===============

Php读取XML情况七,cy.xml变得更复杂一些:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<main> 
<title>a</title> 
<list>1</list> 
<list>2</list> 
<list>3</list> 
</main> 
<main> 
<title>b</title> 
<list>4</list> 
<list>5</list> 
<list>6</list> 
</main> 
<m> 
<title>c</title> 
<list>7</list> 
<list>8</list> 
<list>9</list> 
</m> 
</xml>

那么,我们如何只读出<main></main>内<title></title>中的值呢?

Php文件(cy.php)如下:

<?php 
$xml = new DOMDocument(); 
$xml->load('cy.xml'); 
$main = $xml->getElementsByTagName('main'); 
foreach( $main as $main) 
{ 
$list = $main->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
$title = $main->getElementsByTagName( “title” ); 
foreach ( $title as $title ) 
{ 
$value = $title->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
} $m = $xml->getElementsByTagName('m'); 
foreach( $m as $m) 
{ 
$list = $m->getElementsByTagName( “list” ); 
foreach ( $list as $list ) 
{ 
$value = $list->firstChild->nodeValue; 
echo $value.”<br />”; 
} 
} 
?>

cy.php输出结果:
1
2
3
a
4
5
6

7
8
9

想一下,如何读出<m>中<title></title>的值?

Php读取XML再通过一个例子巩固一下:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<LevelOne> 
<LevelTwo> 
<LevelThree id=”1″>This is Text One</LevelThree> 
<LevelThree id=”2″>This is Text Two</LevelThree> 
<LevelThree id=”3″>This is Text Three</LevelThree> 
</LevelTwo> 
<LevelTwo> 
<LevelThree id=”4″>This is Text Four</LevelThree> 
<LevelThree id=”5″>This is Text Five</LevelThree> 
<LevelThree id=”6″>This is Text Six</LevelThree> 
</LevelTwo> 
</LevelOne>

Php文件(cy.php)如下:
<?php 
$xml = new DOMDocument(); //建立一个DOMDocument 
$xml->load('cy.xml'); //Php指定需要读取xml文件的位置 
$LevelOne = $xml->getElementsByTagName('LevelOne');//按照名称取得节点,返回所有节点的集合,不过这里这样读LevelOne是没有意义的…. 
$LevelOne = $xml->getElementsByTagName('LevelOne')->item(0);//返回第一个LevelOne节点中的内容 
$LevelTwo = $LevelOne->getElementsByTagName('LevelTwo'); //按照名称取得节点,返回所有LevelTwo 
foreach ( $LevelTwo as $Content )//循环读出所有LevelTwo,并在循环里,把LevelTwo用Content表示 
{ 
$LevelThree = $Content->getElementsByTagName('LevelThree');//返回所有LevelThree 
foreach ( $LevelThree as $Concert ) 
{ 
$name = $Concert->nodeName;//节点名称 
$value = $Concert->nodeValue;//节点值 
$id = $Concert->getAttribute('id');//”id”属性值 
echo $name.”<br />”; 
echo $value.”<br />”; 
echo $id.”<br />”; 
} 
} 
?>

如果用$LevelOne = $xml->getElementsByTagName('LevelOne')这样的方式取得节点,那么,读取里面的内容,需要用foreach 循环,因为$LevelOne = $xml->getElementsByTagName ('LevelOne')返回的,是一个集合,并不是一个具体的节点—-仅管叫做LevelOne的节点只有一个….
如果用$LevelOne = $xml->getElementsByTagName('LevelOne')->item(0)这样的方式取得节点,那么读取里面的内 容,可以直接$LevelOne->xxxxxx,因为这样返回的是一个具体的节点。

现在提供一种很简便的方法用PHP读取XML:

XML文件(cy.xml)如下:

<?xml version=”1.0″ encoding=”gb2312″?> 
<xml> 
<site> 
<part id=”1″> 
<title id=”a”>czbin xml版块</title> 
<describe>xml的相关文章</describe> 
</part> 
<part id=”2″> 
<title id=”b”>czbin php版块</title> 
<describe>php的相关文章</describe> 
</part> 
<part id=”3″> 
<title id=”c”>czbin ajax版块</title> 
<describe>ajax的相关文章</describe> 
</part> 
</site> 
</xml>

Php文件(cy.php)如下:
<?php 
$xml = simplexml_load_file('sxml.xml'); 
$part = $xml->site->part; 
foreach ( $part as $content ) 
{ 
echo $content['id'].”<br />”; 
echo $content->title.”<br />”; 
echo $content->title['id'].”<br />”; 
echo $content->describe.”<br />”; 
} 
?>

cy.php输出结果:
1
czbin xml版块
a
xml的相关文章
2
czbin php版块

php的相关文章
3
czbin ajax版块
c
ajax的相关文章

怎么样?的确很简单吧!

PHP 相关文章推荐
用php来检测proxy
Oct 09 PHP
PHP中的cookie
Nov 26 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
php实现头像上传预览功能
Apr 27 PHP
php和html的区别点详细总结
Sep 24 PHP
关于laravel后台模板laravel-admin select框的使用详解
Oct 03 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 #PHP
php xml 入门学习资料
Jan 01 #PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 #PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 #PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 #PHP
php防攻击代码升级版
Dec 29 #PHP
php 传值赋值与引用赋值的区别
Dec 29 #PHP
You might like
php入门小知识
2008/03/24 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
得到form下的所有的input的js代码
2013/11/07 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
iframe实用操作锦集
2014/04/22 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
一些Solaris面试题
2015/12/22 面试题
广告学专业应届生求职信
2013/10/01 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
小学生期末评语大全
2014/04/21 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
寒山寺导游词
2015/02/03 职场文书
安全教育主题班会总结
2015/08/14 职场文书
聘任合同书
2015/09/21 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书