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生成便于打印的网页
Oct 09 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
如何让CI框架支持service层
Oct 29 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
nginx下安装php7+php5
Jul 31 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 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
递归列出所有文件和目录
2006/10/09 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
php实现的xml操作类
2016/01/15 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
js函数调用的方式
2014/05/06 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
利用Python破解验证码实例详解
2016/12/08 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
python中pyplot基础图标函数整理
2020/11/10 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
焊接专业毕业生求职信
2013/10/01 职场文书
电子商务毕业生求职信
2013/11/10 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
消防宣传语大全
2015/07/13 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP