用PHP与XML联手进行网站编程

xml|编程

一、小序

  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、 XML Schema

  XML Schema的作用和DTD类似。但不同的是,Schema文件所描述的是引用它的XML文件中的元素和属性的具体类型。另外,由于它是由XML编写的,Schema和DTD相比较还有以下优点:

  ·XML Schema内容模型是开放的,可以随意扩充,而DTD无法解析扩充的内容。

  ·DTD只能把内容类型定义为一个字符串,而XML Schema允许把内容类型定义为整型、浮点型、布尔型或者许多其它的简单数据类型。

  ·XML Schema利用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(XML Style Language)解决了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

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]);
  本函数用来初始化一个新的 XML 解析器。参数 encoding 可省略,为 XML 使用的字符集,默认值为 ISO-8859-1,其它尚有 US-ASCII、UTF-8 二种。成功则返回 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 参数包括了解析代码及名称二个参数。若无错误则返回 true 值。

  4. xml_set_character_data_handler

boolean xml_set_character_data_handler(int parser, string handler);

  本函数配置字符资料的标头。参数 parser 为解析代码。参数 handler 包括解析代码及资料字符串等二个元素。若无错误则返回 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 值。
五、案例解析

  以下是用PHP5实现读取一个以XML 1.0格式编写的通讯录address.xml,并显示其内容的示例。详解见有关注释。

<?
 //
 //第一部分:几个PHP Helper函数
 //

 /**********************************

 *从一个文件中读取XML的 *
 *内容到字符串中 *

 *********************************/

function read_file($filename)
{
 //读取文件
 $lines=file($filename);
 //变量$contents是存放文件内容的变量
 $contents="";
 while(list($key,$value)=each($lines))
 {
  $contents.=$value;
 }
 return $contents;
}

/*********************************
*当PHP遇到一个XML的起始标记时 *
*调用,其作用是按照一定的层次 *
*显示出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遇到一个XML的结束标记时 *
*调用,其作用是改变当前的层次 *
*计数,并在主标记下显示水平线 *
*********************************/

function stop_element($parser,$name)
{
 //变量$depth存放标记的深度
 global $depth;
 $depth[$parser]--;
 //如果是主标记就显示红色的水平线
 if($depth[$parser]==2)
 {
  echo "<hr color=red size=1>";
 }
}

/*********************************
*当PHP遇到一个XML的标记内容时 *
*调用,其作用是按照一定的层次 *
*显示出标记的内容 *
*********************************/

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";
 }
}

//
//第二部分: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);
?>

时间: 2024-09-20 03:20:55

用PHP与XML联手进行网站编程的相关文章

用PHP与XML联手进行网站编程理论分析

一.小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的.但是随着Web越来越广泛的应用,HTML的弱点也越来越明显了.XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法. 二.HTML的局限性分析 1. HTML的可扩展性差.虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制. 2. 链路丢失后不能自动纠正.由于Web页面的URL地址经常改变,而在改变

用PHP与XML联手进行网站编程代码实例_php技巧

一.小序  HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的.但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了.XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法. 二.HTML的局限性分析 1. HTML的可扩展性差.虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制. 2. 链路丢失后不能自动纠正.由于Web页面的URL地址经常改变,而在改

PHP与XML结合的网站编程

一.小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的.但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了.XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法. 二.HTML的局限性分析 1. HTML的可扩展性差.虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制. 2. 链路丢失后不能自动纠正.由于Web页面的URL地址经常改变,而在改变

用PHP与XML联手进行网站开发

xml     一.小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的.但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了.XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法. 二.HTML的局限性分析 1. HTML的可扩展性差.虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制. 2. 链路丢失后不能自动纠正.由于Web页面的URL地址经

求教一些网站编程的问题,内容为架构一个年级网站

问题描述 求教一些网站编程的问题,内容为架构一个年级网站 VisualC++好,还是学Borland C++ Builder好呢?或者就是要求在Visual Basic和Delphi之间作出选择.学习程序设计和学习程序设计语言究竟是怎么一个关系?初学者究竟应该如何取舍呢?就此我们打个简单的比方:学习程序设计就好比学习射击,而程序设计语言就对应射击中的气枪.手枪.步枪等各种枪械.学习射击必须要选择一种枪械,不可能没有枪还能学好射击的,也不可能同时学会使用所有的枪械.但是,如果掌握一种枪械的射击,再

网站策划方案之网站编程中的细节

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网站编程是网站安全的基础,一个好的程序可以是网站受到攻击而产生不良后果的问题大大减少,网站变成需要专业的编程技术,网站编程要把握的几点: 1.程序语言的选择 目前来说一般网站流行的编程语言有以下几种:JSP.ASP..NET.PHP等等.要用所选的语言编具有什么功能的程序才是网站根本,更具网站的需求开发不懂的系统和功能,通常情况下网站都具有这些基本系统:新闻发布系统(信息发布系统).产品发布系统.会员管理系统.广告管理系统.流量统计分析系统等等.

用PHP与XML进行网站编程

一.小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的.但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了.XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法. 二.HTML的局限性分析 1. HTML的可扩展性差.虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制. 2. 链路丢失后不能自动纠正.由于Web页面的URL地址经常改变,而在改变

XML格式的网站配置文件常见读写方案比较

xml|比较 网站的配置文件,可不仅仅只有 Web.config 一种,还有很多其他的,下面就来分析常见的几种. 一.Web.Config 的启示Web.config 的好处就不用说了,下面说他其中的几个限制. 1.对于Web 应用程序来说,修改web.config 文件,会让Web 应用自动重起. 如果我们某个配置,预计到会时常变更,或者不希望修改后,Web 应用就自动重起.就不应该把他配置在 Web.config 中. 举例:ASP.net 2.0 中新增的 SiteMap 配置文件,显然你

使用xml http为网站增加域名查询功能

xml 当我们准备建立一个Web站点时,就必须向域名登记机构申请一个Internet域名,因此,我们通常希望了解自己准备使用的域名是否已经被注册,这时,可以访问NIC站点http://www.nic.net,点击"whois"链接后输入需查询的域名,就可以得到我们需要的结果. WHOIS为.com..net和.org的国际顶级域名的查询返回全部的whois数据,包括域名注册人.管理合约.联系方式(电话.电子邮件.地址).帐单联络.技术支持和域名信息,对于用户了解一个的基本情况很有帮助.