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 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
深入解析Session是否必须依赖Cookie
Aug 02 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 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捕获Fatal error错误的方法
2014/06/11 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
javascript call方法使用说明
2010/01/11 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python 默认参数相关知识详解
2019/09/18 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
期末总结的个人自我评价
2013/11/02 职场文书
商务英语广告词大全
2014/03/18 职场文书
村长贪污检举信
2014/04/04 职场文书
买卖合同协议书范本
2014/10/18 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
Nginx反向代理学习实例教程
2021/10/24 Servers
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
分享3个非常实用的 Python 模块
2022/03/03 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python