|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一些真正的强人总会搞出新玩意来丢给你,你不学就落后了,也印证了前人的经验,果然是学无止境啊! 在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版权一切,转载时请以链接模式注明原始出处及本声明,感谢。
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。 |
|