用PHP与XML联手进行网站开发
1、小序
HTML简单易学又通用,1般的PHP程序就是嵌进在HTML语言当中实现的。但是随着WEB越来越广泛的利用,HTML的弱点也越来越明显了。XML的出现,弥补了这些不足,它提供了1个能够处理互联网上全部数据的通用方法。
2、HTML的局限性分析
1、 HTML的可扩大性差。固然作为1般的利用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它没法进行扩大,这样使它的发展收到了极大的限制。
2、 链路丢失后不能自动纠正。由于Web页面的URL地址常常改变,而在改变URL地址时必须手工修改这些信息,否则就会碰到“404URL地址未找到”的信息,这大大加重了Web页面的保护工作量。
3、 数据搜索的时间长。由于HTML主要用来对网页的显示进行控制,导致了同1个数据在不同的网页中有不同的存储格式,这样在进行数据搜索时就没法快速找到所需的资料。
4、 HTML对双字节或多国文字的支持不够。例如中文信息页面在不同的平台下会出现没法显示等题目。
正是由于这些缺点,人们研究了能够代替HTML的Web页面制作语言。其中已投进使用的有:可扩大标记语言XML、层叠样式表(CSS)和动态HTML(DHTML)等。
3、XML的组成
这里扼要罗列几种主要的XML技术:
1、 DTD(文档类型声明)
DTD的主要功能是定义XML的内容模式;限制XML标记的数据范围;定义属性的数据类型。但由于它不是用XML编写的,因此扩大性比较差;而且只提供了有限的几种数据类型,因此它的作用是有限的。
2、 XML Schema
XML Schema的作用和DTD类似。但不同的是,Schema文件所描写的是援用它的XML文件中的元素和属性的具体类型。另外,由于它是由XML编写的,Schema和DTD相比较还有以下优点:
·XML Schema内容模型是开放的,可以随便扩充,而DTD没法解析扩充的内容。
·DTD只能把内容类型定义为1个字符串,而XML Schema答应把内容类型定义为整型、浮点型、布尔型或很多其它的简单数据类型。
·XML Schema利用Namespaces将文档中特殊的节点与Schema相联系,1个XML文件可以有多个对应的Schema,而1个XML文件只能有1个DTD。
3、 XLink
作为1种Web语言,XML的链接能力是非常重要的。XML的链接和定址机制包括XLink、XPath和XPointer。XLink提供功能强大的链接方法,可以在文档之间建立单向或多向的复杂联结关系,还有注释链接、概要链接、扩大链接集等多种链接功能。XPath在XSLT和XPointer中使用,支持在XML文档中相对节点和节点集的定位。XPointer在XPath的基础上提供对XML文档的内容的内部结构(如1个字符串或选择的1个段落)的定位。XML的链接能力比HTML有了很大的增强。
4、 CSS与XSL
XML的1大特点就是内容与格式分离,也就是说,XML文档中其实不包括如何显示/表示文档的信息。CSS与XSL(XML Style Language)解决了XML文档的显示题目。
CSS(层叠样式表)也能够用在HTML和XML中。XSL完全使用XML的语法,功能比CSS要强大很多。
5、 DOM
文档对象模型(DOM)是1个与平台、语言无关的程序接口,它提供了动态访问和更新文档的内容、结构与风格的手段。可以对文当作进1步的处理,并将处理的结果更新到表示页面。 DOM的目标就是为XML和HTML定义1个标准的编程接口,它包括核心、HTML和XML3部份。DOM的核心部份建立了1套底层的对象集,它们可以表示任何结构化的文档。HTML和XML提供了高层的接口,可以作为更方便的文档视图。DOM规范由对象和方法组成。程序员使用它们可以更轻易地对特定类型的文档进行访问和操纵。
6、 Namespaces
Namespaces是用URL加以辨别的、在XML文件的元素和属性中出现的所着名称的集合。在XML中,用户可以自己定义标记和元素。因此,假设把多个XML文件合并为1个,就很可能出现冲突。Namespaces则解决了这个题目。
4、PHP对XML的支持
PHP对XML提供了的强大的支持。它使用了1个XML的“解析器”,并且为了支持这个解析器,它提供了20(PHP4)个XML的解析函数。下面是几个最常常使用的PHP解析函数。
1. xml_parse
boolean xml_parse(int parser, string data, int [isFinal]); |
本函数用来解析 XML 格式的文件资料。参数 parser 为解析代码。参数 data 为解析的资料区块 (chunk)。参数 isFinal 可省略,若设为 true 则系统会自动送出最后的资料部份 (piece) 给 data 参数。若无毛病则返回 true 值。
2. xml_parser_create
int xml_parser_create(string [encoding]); |
本函数用来初始化1个新的 XML 解析器。参数 encoding 可省略,为 XML 使用的字符集,默许值为 ISO⑻859⑴,其它尚有 US-ASCII、UTF⑻ 2种。成功则返回 parser 代码供其它函数使用,失败则返回 false 值。
3. xml_set_element_handler
boolean xml_set_element_handler(int parser, string startElementHandler, string endElementHandler); |
本函数配置元素的标头供 xml_parse() 函数使用。参数 parser 为解析代码。参数 startElementHandler 及 endElementHandler 分别为元素开始与结束的标头,其中的 startElementHandler 必须包括解析代码、名称、与属性,而 endElementHandler 参数包括了解析代码及名称2个参数。若无毛病则返回 true 值。
4. xml_set_character_data_handler
boolean xml_set_character_data_handler(int parser, string handler); |
本函数配置字符资料的标头。参数 parser 为解析代码。参数 handler 包括解析代码及资料字符串等2个元素。若无毛病则返回 true 值。
5. xml_get_error_code
int xml_get_error_code(int parser); |
本函数可取得 XML 在处理时的毛病代码。参数 parser 为解析代码。若 parser 有错则返回 false 值,否则就返回毛病代码 (如 XML_ERROR_BINARY_ENTITY_REF .... 等等)。
6. xml_error_string
string xml_error_string(int code); |
本函数可取得 XML 在处理时的毛病代码。参数 code 为解析毛病代码。若无毛病返回值为代码的文字描写字符串。
7. xml_get_current_line_number
int xml_get_current_line_number(int parser); |
本函数用来取得目前 XML 解析所正在处理的行号。参数 parser 为解析代码。若 parser 有错则返回 false 值,若无毛病则返回行号数字。
8. xml_parser_free
boolean xml_parser_free(int parser); |
本函数用来开释目前 XML 解析所使用的内存。参数 parser 为解析代码。若没有毛病则返回 true 值,否则返回 false 值。
5、案例解析
以下是用PHP5实现读取1个以XML 1.0格式编写的通讯录address.xml,并显示其内容的示例。详解见有关注释。
<? // //第1部份:几个PHP Helper函数 // /********************************** *从1个文件中读取XML的 * *内容到字符串中 * *********************************/ function read_file($filename) { //读取文件 $lines=file($filename); //变量$contents是寄存文件内容的变量 $contents=; while(list($key,$value)=each($lines)) { $contents.=$value; } return $contents; } /********************************* *当PHP碰到1个XML的起始标记时 * *调用,其作用是依照1定的层次 * *显示出XML的标记 * *********************************/ function start_element($parser, $name, $attrs) { //变量$depth寄存标记的深度 global $depth; //变量$spacer寄存标记前所有的箭头符号 $spacer=; for ($i=1;$i<$depth[$parser];$i++) { $spacer.=->; } //设置标记显示时的色采 if($depth[$parser]==0) { $font_color=red; } else if($depth[$parser]==1) { $font_color=green; } else { $font_color=blue; } //设置标记显示时的字体 $font_size=5-$depth[$parser]; if ($font_size<2) { $font_size=2; } //显示标记 echo <font size=.$font_size. color=.$font_color.>; echo $spacer.$depth[$parser]; if ($depth[$parser]<>0) { echo 、; } echo $name.<BR>; echo </font>; $depth[$parser]++; //假设是主标记就显示红色的水平线 if($depth[$parser]==2) { echo <hr color=red size=1>; } } /********************************* *当PHP碰到1个XML的结束标记时 * *调用,其作用是改变当前的层次 * *计数,并在主标记下显示水平线 * *********************************/ function stop_element($parser,$name) { //变量$depth寄存标记的深度 global $depth; $depth[$parser]--; //假设是主标记就显示红色的水平线 if($depth[$parser]==2) { echo <hr color=red size=1>; } } /********************************* *当PHP碰到1个XML的标记内容时 * *调用,其作用是依照1定的层次 * *显示出标记的内容 * *********************************/ function char_data($parser,$data) { //变量$depth寄存标记的深度 global $depth; //显示标记的内容 $data=trim($data); if (strlen($data)) { for ($i=1;$i<$depth[$parser]+6;$i++) echo echo <b>$data</b><br>\\n; } } // //第2部份:PHP文件开始履行处 // //要解析的XML文件的名字 $file=address.xml; //读取文件 $data=read_file($file); // 产生解析器的实例 $parser = xml_parser_create(); // 设置处理函数 xml_set_element_handler($parser, start_element, stop_element); xml_set_character_data_handler($parser, char_data); // 解析文件 if(!xml_parse($parser,$data,1)) { //报错 die(sprintf(XML error: %s at line %d, xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } // 开释解析器 xml_parser_free($parser); ?> |
http://www.fw8.net/
TAG:内容,参数,代码,函数,标记
评论加载中...
|