仓酷云
标题:
PHP网站制作之简述PHP4和PHP5版本下解析XML文档的操作...
[打印本页]
作者:
乐观
时间:
2015-2-3 23:36
标题:
PHP网站制作之简述PHP4和PHP5版本下解析XML文档的操作...
一些真正的强人总会搞出新玩意来丢给你,你不学就落后了,也印证了前人的经验,果然是学无止境啊! 在PHP网站开辟与建立过程当中,经常会碰着需求对XML文档停止解析,PHP4版本自带了XML解析器(sax),PHP5版本增添了SimpleXML(基于dom)的XML扩大,对XML的解析更长短常便利,明天和人人分享下在分歧情况下对XML文档停止解析的办法。
XML文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="gbk"?>
<LeapsoulXML>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开辟</name>
<website>http://www.leapsoul.cn</website>
<description>分享PHP网站开辟与建立的乐趣,教你若何创立网站</description>
<bloger>David</bloger>
<date>2009-05-13</date>
<qq>QQ:154130270</qq>
</LeapsoulInfo>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开辟</name>
<website>http://www.leapsoul.cn</website>
<description>分享PHP网站开辟与建立的乐趣,教你若何创立网站</description>
<bloger>David</bloger>
<date>2009-05-13</date>
<qq>QQ:154130270</qq>
</LeapsoulInfo>
</LeapsoulXML>
PHP5版本下SimpleXML的利用办法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$info = simplexml_load_file('leapsoulcn.xml');
print_r($info);
$name = $info->LeapsoulInfo[0]->name;
echo $name;
foreach ($info->LeapsoulInfo as $LeapsoulInfo)
{
echo $LeapsoulInfo->name."<br />";
echo $LeapsoulInfo->website."<br />";
echo $LeapsoulInfo->description."<br />";
echo $LeapsoulInfo->bloger."<br />";
echo $LeapsoulInfo->date."<br />";
echo $LeapsoulInfo->qq."<br />";
}
foreach($info->xpath('//name') as $value) {
echo $value.'<br />';
}
foreach($info->LeapsoulInfo[0]->children() as $value) {
echo $value->getName();
echo $value.'<br />';
}
$info->LeapsoulInfo[0]->addChild('msn', 'MSN:davidfaithman@hotmail.com');
$info->asXML('leapsoulcn.xml');
代码正文
第1行:
simplexml_load_file
:读取一个xml文档作为操尴尬刁难象,可以读取当地或近程xml文档;
simplexml_load_string
:读取一个xml字符串作为操作的对象
第3行:假如不清晰若何获得某个节点的信息,可用print_r函数打印输入检查详细的布局,simplexml解析前往的对象具无数组布局。
第5~8行:以对象体例读取某个XML文档节点信息,读取体例:句柄->节点元素名->子节点,假如不异的节点元素有多个,则以数组(array)体例读取
注
:因为simplexml解析前往的信息是UTF8格局的,假如网站利用的是GBK的,则需求转码,你可使用iconv函数或其他的utf8与gbk转换函数停止操作,如:
$name = iconv(’utf-8′,’gbk’,$name);
第9~17行:以遍历的模式,读取一切元素下的子节点信息
第19~21行:simplexml的
xpath
函数是用来查询XML数据的,好比这里查询的是一切name节点的值
第23~26行:
children
函数是用来找寻某个特定节点下一切子节点的值。
getName
函数用来取得每一个子节点的元素称号
第28~29行:
addChild
函数用来在某个特定节点下增添一个子节点;
asXML
函数对已做过修改的XML文档停止保留
点击检查更多SimpleXML函数申明。
PHP4版本自带的XML函数解析办法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function doStartElement($xmlParser,$name,$attr)
{
//对入手下手元素的处置
}
function doEndElement($xmlParser,$name)
{
//对开头元素的处置
}
function doStringData($xmlParser,$data)
{
//对元素间的字符数据的处置
}
$xmlObj = xml_parser_create("UTF-8");
xml_set_element_handler($xmlObj,"doStartElement","doEndElement");
xml_set_character_data_handler($xmlObj,"doStringData");
xml_parse($xmlObj,file_get_contents("leapsoulcn.xml"));
xml_parser_free($xmlObj);
代码正文
第1~15行:界说入手下手元素,开头元素和元素间字符数据的处置函数
第16行:创立一个新的XML解析器并前往可被其它XML函数利用的资本句柄,输出默许编码体例为 “ISO-8859-1”。同时,撑持的编码体例还有“UTF-8”和 “US-ASCII”,输入数据编码体例是和xml_parser_create函数处界说相分歧。
第18行:创立肇端和终止元素处置器
第20行:创立字符数据处置器,处置元素之间的相干数据
注
:XML语法解析器不会加上或去失落任何空格,空格的弃取将由开辟者本人决意。
第22行:启动解析器xml_parse函数第二个参数是字符型的,所以需求读取相干的XML文档信息,此处我用的是file_get_contents函数,当地近程都可行,固然你也能够利用fopen函数
第24行:XML解析完成后,释放解析器占用的内存
自带的XML函数解析思绪
第一步:自界说入手下手元素,开头元素和元素间字符数据的处置函数;第二步:创立一个XML解析器;第三步:创立肇端和终止元素处置器;第四步:创立字符数据处置器,处置元素之间的相干数据;第五步:启动解析器;第六步:XML解析完成后,释放解析器占用的内存。
总结
:
总的来讲PHP自带的XML解析器利用起来相当繁琐,需求有较强的逻辑,并且假如XML文档布局分歧,元素、字符等3个函数需求从头界说,而在PHP5版本增添了SimpleXML扩大后,XML解析起来十分复杂,固然假如你需求停止更庞杂的XML文档解析操作,你也能够下载装置并利用libxml,功效相当强。
注
:PHP网站开辟教程-leapsoul.cn版权一切,转载时请以链接模式注明原始出处及本声明,感谢。
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。
作者:
深爱那片海
时间:
2015-2-4 03:28
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
作者:
小魔女
时间:
2015-2-9 13:51
实践是检验自己会不会的真理。
作者:
变相怪杰
时间:
2015-2-12 05:50
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者:
分手快乐
时间:
2015-2-14 06:26
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者:
海妖
时间:
2015-3-4 05:01
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者:
老尸
时间:
2015-3-11 17:16
基础有没有对学习php没有太大区别,关键是兴趣。
作者:
飘飘悠悠
时间:
2015-3-17 04:12
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者:
再见西城
时间:
2015-3-19 18:56
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者:
只想知道
时间:
2015-3-20 23:58
爱上php,他也会爱上你。
作者:
小妖女
时间:
2015-3-29 16:47
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
作者:
莫相离
时间:
2015-4-3 02:45
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者:
山那边是海
时间:
2015-4-4 08:48
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者:
金色的骷髅
时间:
2015-4-4 10:20
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者:
简单生活
时间:
2015-4-5 12:16
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者:
愤怒的大鸟
时间:
2015-4-5 22:09
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者:
仓酷云
时间:
2015-4-13 00:38
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者:
柔情似水
时间:
2015-4-14 18:47
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者:
透明
时间:
2015-4-16 17:12
基础有没有对学习php没有太大区别,关键是兴趣。
作者:
兰色精灵
时间:
2015-4-17 14:15
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2