用PHP与XML联手进行网站开发
来源:互联网 发布:增长的极限读后感知乎 编辑:程序博客网 时间:2024/04/28 04:48
一、小序
HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的。但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了。XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法。
二、HTML的局限性分析
1、HTML的可扩展性差。虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制。
2、链路丢失后不能自动纠正。由于Web页面的URL地址经常改变,而在改变URL地址时必须手工修改这些信息,否则就会遇到“404URL地址未找到”的信息,这大大加重了Web页面的维护工作量。
3、数据搜索的时间长。由于HTML主要用来对网页的显示进行控制,导致了同一个数据在不同的网页中有不同的存储格式,这样在进行数据搜索时就无法快速找到所需的资料。
4、HTML对双字节或者多国文字的支持不够。例如中文信息页面在不同的平台下会出现无法显示等问题。
正是由于这些缺点,人们研究了能够代替HTML的Web页面制作语言。其中已经投入使用的有:可扩展标记语言XML、层叠样式表(CSS)以及动态HTML(DHTML)等。
三、XML的组成
这里简要列举几种主要的XML技术:
1、DTD(文档类型声明)
DTD的主要功能是定义XML的内容模式;限制XML标记的数据范围;定义属性的数据类型。但由于它不是用XML编写的,因此扩展性比较差;而且只提供了有限的几种数据类型,因此它的作用是有限的。
2、XMLSchema
XMLSchema的作用和DTD类似。但不同的是,Schema文件所描述的是引用它的XML文件中的元素和属性的具体类型。另外,由于它是由XML编写的,Schema和DTD相比较还有以下优点:
·XMLSchema内容模型是开放的,可以随意扩充,而DTD无法解析扩充的内容。
·DTD只能把内容类型定义为一个字符串,而XMLSchema允许把内容类型定义为整型、浮点型、布尔型或者许多其它的简单数据类型。
·XMLSchema利用Namespaces将文档中特殊的节点与Schema相联系,一个XML文件可以有多个对应的Schema,而一个XML文件只能有一个DTD。
3、XLink
作为一种Web语言,XML的链接能力是非常重要的。XML的链接和定址机制包括XLink、XPath和XPointer。XLink提供功能强大的链接方法,可以在文档之间建立单向或多向的复杂联结关系,还有注释链接、概要链接、扩展链接集等多种链接功能。XPath在XSLT和XPointer中使用,支持在XML文档中相对于节点和节点集的定位。XPointer在XPath的基础上提供对XML文档的内容的内部结构(如一个字符串或者选择的一个段落)的定位。XML的链接能力比HTML有了很大的增强。
4、CSS与XSL
XML的一大特点就是内容与格式分离,也就是说,XML文档中并不包含如何显示/表示文档的信息。CSS与XSL(XMLStyleLanguage)解决了XML文档的显示问题。
CSS(层叠样式表)也可以用在HTML和XML中。XSL完全使用XML的语法,功能比CSS要强大得多。
5、DOM
文档对象模型(DOM)是一个与平台、语言无关的程序接口,它提供了动态访问和更新文档的内容、结构与风格的手段。可以对文当作进一步的处理,并将处理的结果更新到表示页面。 DOM的目标就是为XML和HTML定义一个标准的编程接口,它包括核心、HTML和XML三部分。DOM的核心部分建立了一套底层的对象集,它们可以表示任何结构化的文档。HTML和XML提供了高层的接口,可以作为更方便的文档视图。DOM规范由对象和方法组成。程序员使用它们可以更容易地对特定类型的文档进行访问和操作。
6、Namespaces
Namespaces是用URL加以区别的、在XML文件的元素和属性中出现的所有名称的集合。在XML中,用户可以自己定义标记和元素。因此,如果把多个XML文件合并为一个,就很可能出现冲突。Namespaces则解决了这个问题。
四、PHP对XML的支持
PHP对XML提供了的强大的支持。它使用了一个XML的“解析器”,并且为了支持这个解析器,它提供了20(PHP4)个XML的解析函数。下面是几个最常用的PHP解析函数。
1.XML_parse
本函数用来解析XML格式的文件资料。参数parser为解析代码。参数data为解析的资料区块(chunk)。参数isFinal可省略,若设为true则系统会自动送出最后的资料部分(piece)给data参数。若无错误则返回true值。
2.XML_parser_create
本函数用来初始化一个新的XML解析器。参数encoding可省略,为XML使用的字符集,默认值为ISO-8859-1,其它尚有US-ASCII、UTF-8二种。成功则返回parser代码供其它函数使用,失败则返回false值。
3.XML_set_element_handler
本函数配置元素的标头供XML_parse()函数使用。参数parser为解析代码。参数startElementHandler及endElementHandler分别为元素开始与结束的标头,其中的startElementHandler必须包括解析代码、名称、与属性,而endElementHandler参数包括了解析代码及名称二个参数。若无错误则返回true值。
4.XML_set_character_data_handler
本函数配置字符资料的标头。参数parser为解析代码。参数handler包括解析代码及资料字符串等二个元素。若无错误则返回true值。
5.XML_get_error_code
本函数可取得XML在处理时的错误代码。参数parser为解析代码。若parser有错则返回false值,否则就返回错误代码(如XML_ERROR_BINARY_ENTITY_REF....等等)。
6.XML_error_string
本函数可取得XML在处理时的错误代码。参数code为解析错误代码。若无错误返回值为代码的文字描述字符串。
7.XML_get_current_line_number
本函数用来取得目前XML解析所正在处理的行号。参数parser为解析代码。若parser有错则返回false值,若无错误则返回行号数字。
8.XML_parser_free
本函数用来释放目前XML解析所使用的内存。参数parser为解析代码。若没有错误则返回true值,否则返回false值。
五、案例解析
以下是用PHP5实现读取一个以XML1.0格式编写的通讯录address.XML,并显示其内容的示例。详解见有关注释。
<?
//
//第一部分:几个PHP Helper函数
//
/**********************************
*从一个文件中读取XML的*
*内容到字符串中*
*********************************/
functionread_file($filename)
{
//读取文件
$lines=file($filename);
//变量$contents是存放文件内容的变量
$contents=;
while(list($key,$value)=each($lines))
{
$contents.=$value;
}
return$contents;
}
/*********************************
*当PHP遇到一个XML的起始标记时*
*调用,其作用是按照一定的层次*
*显示出XML的标记*
*********************************/
functionstart_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<fontsize=.$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<hrcolor=redsize=1>;
}
}
/*********************************
*当PHP遇到一个XML的结束标记时*
*调用,其作用是改变当前的层次*
*计数,并在主标记下显示水平线*
*********************************/
functionstop_element($parser,$name)
{
//变量$depth存放标记的深度
global$depth;
$depth[$parser]--;
//如果是主标记就显示红色的水平线
if($depth[$parser]==2)
{
echo<hrcolor=redsize=1>;
}
}
/*********************************
*当PHP遇到一个XML的标记内容时*
*调用,其作用是按照一定的层次*
*显示出标记的内容*
*********************************/
functionchar_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;
}
}
//
//第二部分: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(XMLerror:%satline%d,
XML_error_string(XML_get_error_code($parser)),
XML_get_current_line_number($parser)));
}
//释放解析器
XML_parser_free($parser);
?>
- 用PHP与XML联手进行网站开发
- [ZT]用PHP与XML联手进行网站编程
- 用PHP与XML 联手进行网站编程(一)
- 用PHP与XML 联手进行网站编程(二)
- 用PHP与XML进行网站编程
- 用PHP与XML进行网站编程
- 甲骨文与Zend将宣布合作 联手加强PHP开发
- 黑客与票贩子联手入侵185个政府网站
- 用 Eclipse 进行 XML 开发
- 用Eclipse进行XML开发
- 与PHP开发相关的网站资源
- php网站开发与Ajax的实现
- PHP与MySQL网站开发完全接触
- 艾蒙与SanDisk联手开发下一代闪存新标准
- Adobe与Facebook联手推出Flash开发工具
- 挑战Google!传Facebook与Yahoo要联手开发搜索引擎
- php与delphi通过XML进行数据交互
- 用火狐浏览器进行网站的手机页面设计与开发
- 通过php来读取xml的数据
- PHPShell的编写(改进版)
- 使用PHP往Windows系统中添加用户
- 利用PHP编程防范XSS跨站脚本攻击
- PHP程序漏洞产生的原因和防范方法
- 用PHP与XML联手进行网站开发
- 搜索引擎技术核心揭密(PHP版)
- PHP中for循环语句的几种“变态”用法
- PHP下一代的五个framework介绍
- 基于PHP和AJAX创建RSS聚合器
- php分页类
- 测试ApacheWeb和PHP应用程序服务器
- 用VB6.0编写自我升级的程序(一)
- 用php实现简单的滑动菜单