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+mysql扎实个人基本功
Mar 27 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
基于PHP对XML的操作详解
Jun 07 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
php单一接口的实现方法
Jun 20 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
smarty简单应用实例
Nov 03 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
php文件缓存方法总结
Mar 16 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 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变量存储的详解
2013/06/13 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
详解Python做一个名片管理系统
2019/03/14 Python
浅谈python3中input输入的使用
2019/08/02 Python
pytorch构建多模型实例
2020/01/15 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python 实现两个npy档案合并
2020/07/01 Python
python 实现图片批量压缩的示例
2020/12/18 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
DNA测试:Orig3n
2019/03/01 全球购物
.NET常见笔试题集
2012/12/01 面试题
大学生毕业自我评价范文分享
2013/11/07 职场文书
厨师岗位职责
2013/11/12 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
新书发布会策划方案
2014/06/09 职场文书
会计个人实习计划书
2014/08/15 职场文书
Python OpenGL基本配置方式
2022/05/20 Python