乐观 发表于 2015-2-3 23:36:13

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&#40;'leapsoulcn.xml'&#41;;

print_r&#40;$info&#41;;
   
$name = $info->LeapsoulInfo&#91;0&#93;->name;
   
echo $name;

foreach &#40;$info->LeapsoulInfo as $LeapsoulInfo&#41;
{
   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&#40;$info->xpath&#40;'//name'&#41; as $value&#41; {
   echo $value.'<br />';
}
   
foreach&#40;$info->LeapsoulInfo&#91;0&#93;->children&#40;&#41; as $value&#41; {
   echo $value->getName&#40;&#41;;
   echo $value.'<br />';
}

$info->LeapsoulInfo&#91;0&#93;->addChild&#40;'msn', 'MSN:davidfaithman@hotmail.com'&#41;;
$info->asXML&#40;'leapsoulcn.xml'&#41;; 代码正文
第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&#40;$xmlParser,$name,$attr&#41;
{
   //对入手下手元素的处置
}
   
function doEndElement&#40;$xmlParser,$name&#41;
{
   //对开头元素的处置
}
   
function doStringData&#40;$xmlParser,$data&#41;
{
   //对元素间的字符数据的处置
}

$xmlObj = xml_parser_create&#40;"UTF-8"&#41;;

xml_set_element_handler&#40;$xmlObj,"doStartElement","doEndElement"&#41;;

xml_set_character_data_handler&#40;$xmlObj,"doStringData"&#41;;

xml_parse&#40;$xmlObj,file_get_contents&#40;"leapsoulcn.xml"&#41;&#41;;

xml_parser_free&#40;$xmlObj&#41;; 代码正文
第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:11

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

小魔女 发表于 2015-2-9 13:51:23

实践是检验自己会不会的真理。

变相怪杰 发表于 2015-2-12 05:50:44

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

分手快乐 发表于 2015-2-14 06:26:41

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

海妖 发表于 2015-3-4 05:01:55

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

老尸 发表于 2015-3-11 17:16:54

基础有没有对学习php没有太大区别,关键是兴趣。

飘飘悠悠 发表于 2015-3-17 04:12:16

找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。

再见西城 发表于 2015-3-19 18:56:29

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

只想知道 发表于 2015-3-20 23:58:45

爱上php,他也会爱上你。

小妖女 发表于 2015-3-29 16:47:48

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

莫相离 发表于 2015-4-3 02:45:05

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

山那边是海 发表于 2015-4-4 08:48:24

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

金色的骷髅 发表于 2015-4-4 10:20:00

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

简单生活 发表于 2015-4-5 12:16:14

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

愤怒的大鸟 发表于 2015-4-5 22:09:33

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

仓酷云 发表于 2015-4-13 00:38:23

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

柔情似水 发表于 2015-4-14 18:47:46

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

透明 发表于 2015-4-16 17:12:16

基础有没有对学习php没有太大区别,关键是兴趣。

兰色精灵 发表于 2015-4-17 14:15:20

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页: [1]
查看完整版本: PHP网站制作之简述PHP4和PHP5版本下解析XML文档的操作...