在php中开发xml应用程序之基础篇

一、 xml简介

  xml(可扩展的标注语言)是一种w3c标准,主要用于web应用程序和服务器之间实现容易的交互、数据的存储与使用。

  使用xml标准编码的数据具有能容易被人和计算机解释的意义和结构。xml数据是平台和应用程序独立的。不用多说,这本身就使xml成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途而被开发的)。最近,宽带连接的增长及消费者对于越过任何媒体进行数据共享的应用软件的需求意味着,xml web服务和应用软件正变得越来越丰富。

  xml的发明正是为了解决描述网上丰富的数据的组织问题;而目前为止,这一问题仅能够通过html的巧妙使用得到部分地解决。

  下面是一xml文档的实例:

<?xml version=”1.0″?>
<party>
 <location>my house</location>
 <time>7pm</time>
 <guest>
  <name>john bloggs</name>
  <item>crate of fosters</item>
 </guest>
 <guest>
  <name>sara bloggs</name>
  <item>umbrella</item>
 </guest>
 <guest>
  <name>david fig</name>
  <item>bombay mix</item>
 </guest>
</party>

  如果你以前没见过xml,那么你可以认为它看起来象html。html是一种sgml应用程序,而xml是它的一个子集。然而,其相似性还包括它们具有相似的标注分隔符。

  仅需看一下上面的xml片断,我们就能看到,该数据是描述一个具有一些客人的聚会;其中,每一个客人相应于一项。用于描述数据的标签名完全由作者来选择。所有xml标准要求:数据必须是一致的并且用于描述数据的标签为良构的。我们可以进一步用一种文档类型声明(dtd)或一个xml模式来强制数据的完整性。然而为简化起见,我们在本文中将仅使用普通的xml。

  二、 xml应用程序

  刚才,我们已经看到了如何使用xml来描述任何种类的数据。事实上,xml已经在今天的许多web应用程序中得到广泛使用,下面是一些著名的应用描述:

  · xhtml-这是使用最广泛的xml应用程序之一。它类似基于html的sgml-用于描述数据在网页上的显示方式。xhtml使用一dtd来确保所有的文档遵循标准。xhtml的出现使web程序员的开发稍微容易了一些;然而,一种完全兼容于css和xhtml标准的web浏览器尚未出现。

  · xml-rpc-远程过程调用(rpc),应用于分布式应用程序中以调用远程计算机上的过程。xml-rpc使用xml对关于过程调用的信息进行编码,并且使用http把它发送到接收计算机。然后,过程的返回值被再次用xml编码并用http连接发送回调用者计算机。

  · rss-真正简单的聚合/丰富的站点摘要,它是一种用来聚合web站点内容(例如新闻、文章、共享价格和链接等)的方法,它用一个特殊的应用程序(一个聚合器)定期更新用户pc上的rss回馈。该rss数据是使用xml进行编码和传输的。

  · ajax-异步的javascript和xml,允许web开发者创建具有丰富特征的事件驱动的运行在web浏览器上的web应用程序。其中,javascript用于把xml编码的数据发送到服务器端脚本(或从服务器端接收xml编码的数据),并允许局部的实时的页面更新而不需要更新所有页面内容。

  上面仅仅是xml的可能的应用的一部分。在以后文章中,我们将分析如何在php中使用这些应用软件。

  三、 在php中使用xml

  自从php 5.0以来,php能与xml交互的可用选项显著地增加。而php版本4所能提供的是不稳定的而且是非w3c兼容的dom xml扩展。
下面,我将集中讨论php 5所提供给我们的三个允许我们与xml交互的方法:dom,简单xml和xpath。在可能之处,我将建议最适合于每种方法的条件和数据。所有的示例代码将使用xml数据源来描述一个库及其中包含的书。

<xml version=”1.0″?>
<library>
 <categories>
  <category c>web development</category>
  <category c>database programming</category>
  <category c>php</category>
  <category c>java</category>
 </categories>
 <books>
 <book>
  <title>apache 2</title>
  <author>peter wainwright</author>
  <publisher>wrox</publisher>
  <category>1</category>
 </book>
 <book>
  <title>advanced php programming</title>
  <author>george schlossnagle</author>
  <publisher>developer library</publisher>
  <category>1</category>
  <category>3</category>
 </book>
 <book>
  <title>visual foxpro 6 – programmers guide</title>
  <author>eric stroo</author>
  <publisher>microsoft press</publisher>
  <category>2</category>
 </book>
 <book>
  <title>mastering java 2</title>
  <author>john zukowski</author>
  <publisher>sybex</publisher>
  <category>4</category>
 </book>
</books>
</library>

 四、 dom

  dom php扩展名允许使用w3c dom api在xml文档上进行操作。在php 5出现之前,这是php能存取xml文档的唯一方法。如果你在javascript中使用了dom,那么会认识到这些对象模型几乎是一样的。

  由于dom方法在遍历和操作xml文档时比较罗嗦,所以任何dom兼容的代码都有明显的优点-与任何其它实现相同的w3c兼容的对象模型的api兼容。

  在下面的实例代码中,我们使用dom来显示关于每本书的信息。首先,我们遍历一下列表目录,把它们的id和相应的名字装载到一个索引数组中。然后,我们显示每本书的一个简短描述:

  php:

<?php
 /*这里我们必须指定xml版本:也即是1.0 */
 $xml = new domdocument(1.0);
 $xml->load(xml/library.xml);
 /*首先,创建一个目录列表*/
 $categories = array();
 $xmlcategories = $xml->getelementsbytagname(categories)->item(0);
 foreach($xmlcategories->getelementsbytagname(category) as $categorynode) {
  /*注意我们是如何得到属性的*/
  $cid = $categorynode->getattribute(cid);
  $categories[$cid] = $categorynode->firstchild->nodevalue;
 }
?>
<html>
<head>
<title>xml library</title>
</head>
<body>
<?
 php foreach($xml->getelementsbytagname(book) as $book):
 /*查找标题*/
 $title = $book->getelementsbytagname(title)->item(0)->firstchild->nodevalue;
 /*查找作者-为了简化起见,我们假设仅仅有一个作者*/
 $author = $book->getelementsbytagname(author)->item(0)->firstchild->nodevalue;
 /* 列表目录*/
 $bookcategories = $book->getelementsbytagname(category);
 $catlist = ;
 foreach($bookcategories as $category) {
  $catlist .= $categories[$category->firstchild->nodevalue] . , ;
 }
 $catlist = substr($catlist, 0, -2); ?>
<p>

http://www.bkjia.com/phpjc/508481.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/508481.htmltecharticle一、 xml简介 xml(可扩展的标注语言)是一种w3c标准,主要用于web应用程序和服务器之间实现容易的交互、数据的存储与使用。 使用xml标准编…

Posted in 未分类

发表评论