A-A+

php与XML、XSLT、Mysql结合运用

2008年11月29日 未分类 暂无评论 阅读 1 次

一 安装篇

经常看到有用户问一些关于php与XML、数据库结合运用的贴子,也经常看到一些初学者把php代码与HTML代码混写到一起,然后在出错的时候找不到错误,急得团团转,下面我就给大家讲一下如何用XML技术将HTML代码和PHP程序分离,当然,分离的技术有好多种,比如PEAR中的IT模板。总的来说,个人认为使用XML技术是最方便的,废话不多说了,我们言归正传,讲一下在win2000下的安装。

使用php中的xml与xslt要用到一些dll库:
extension=php_domxml.dll //操作XML的函数库
extension=php_iconv.dll //转码用的,比如将??????的转成UTF-8的
extension=php_xslt.dll //XSLT的函数库
 

使用上面这三个库的时候,你要将php安装目录下的dlls目录加入到路径中,否则会找不到这些类库的。在下面的课程中,我们会用到php中的PEAR类库,主要用了DB类库,Sql2XML类库,大家可以在

pear.php.net上下载最新的版本,下载完上面二个类库以后,大家最好在php.ini中设置一下:
include_path = ".;d:phppear"

d:phppear 是我的pear的安装路径
 

设置完以后,重新启动一下机器,否则因为路径找不到而导致Apache启动不正常,无法正常使用。至此要使用PHP中的XML和XSLT的设置就完成了,很简单。

使用Linux的用户可以到
http://www.gingerall.com/下载关于XSLt的源码
http://www.gnu.org/software/libicon...关于Iconv的源码
 

二 初级篇

下面我要讲的是一个简单的从数据库中抽取数据,生成XML文档,使用XSLT转换成HTML的过程,

该过程只讲使用这一技术的过程,不会涉及分页等其它的技术。该示例我使用下面的数据库表及数据

表名:企业用户信息表,英文名:yhxx

表结构:
#
# 数据表的结构 `yhxx`
#

CREATE TABLE yhxx (
nsrnm varchar(15) NOT NULL default '',
qymc varchar(200) NOT NULL default '',
qydh varchar(50) NOT NULL default '',
PRIMARY KEY (nsrnm)
) TYPE=MyISAM COMMENT='用户信息表';

#
# 数据表内容 `yhxx`
#

INSERT INTO yhxx VALUES ('810109040111985', '北京扬程发展有限公司', '8610-666666666');
INSERT INTO yhxx VALUES ('810104040221736', '北京国信开元贸易有限公司', '88888888');
INSERT INTO yhxx VALUES ('810108040331576', '飞阁艺术公司', '44444444');
 

接下来我开始写抽取数据的程序与显示数据的页面,为了使大家都能明白,使用最简单的方法来写程序。
程序文件名称:browesData.php
页面文件名称:browesData.html
 

程序及页面文件提供下载,本程序已经在win2000、mysql下通过测试。

如果大家对此技术感兴趣,我再为大家讲一下php与xml、xslt、数据库结合更深一步的应用
?>
getMessage()); //连接失败,输出出错信息
}

//下面二个是公共的函数
/**
* 读取xsl文档
*
* @param String
 

程序代码:  
  ------------------------------------------------------------------------  
  <?php  
  require_once   "DB.php"; //PEAR中的数据库处理类  
  $dataType   =   "mysql"   ; //数据库类型  
  $user   =   "root"; //用户名    
  $pass   =   "abcd"   ; //密码  
  $host="202.96.215.200"; //Mysql数据库服务器地址  
  $db_name   =   "test"; //数据库名  
  $dsn="$dataType://$user:$pass@$host/$db_name";       //连接数据库的DNS配制  
  $db   =   DB::connect($dsn); //连接数据库  
  if   (DB::isError($db))    
  {          
  die   ($db->getMessage()); //连接失败,输出出错信息  
  }  
   
  //下面二个是公共的函数  
  /**  
    *   读取xsl文档  
    *    
    *   @param   String   $filename   -   xsl文件的名称  
    *   @return   string    
    */  
  function   readXsl($filename)  
  {  
  if(false==file_exists($filename))  
  {  
  echo   "要读取的文件<font   color='red'>$filename</font>不存在</br   />";  
  return   false ;  
  }  
  return   implode('',   file($filename));  
  }   //end   function   readXsl  
   
  /**  
    *   将xml文件或数组变量根据xsl文件转换成HTML内容  
    *    
    *   @param   array   $arydata   -   数组变量  
    *   @param   String   $xslstring   -   xsl文档数据  
    *   @param   String   $xmlstring   -   xml文档数据  
    */  
  function   getHtml($arydata   =   false,   $xslstring   =   false,   $xmlstring   =   false)  
  {  
  global   $db   ; //使用刚才的$db对象  
  include_once("XML/sql2xml.php"); //把sql2xml包含进来  
  $sql2xmlclass   =   new   xml_sql2xml($db); //将sql2xml实例化  
  $sql2xmlclass->setEncoding("GB2312"); //设置数据的转码类型  
  if   (false   ==   $xmlstring)   {   //   如果用户传入数组数据,则应用该数组数据到xsl  
  //设置生成XML文档数据的节点名称  
  $options   =   array   (     tagNameRow             =>   "row"   ,  
                                          tagNameResult       =>   "result"  
                  );  
  $sql2xmlclass->SetOptions($options);  
  //添加要生成XML文档的数据  
  $sql2xmlclass->add($arydata);  
  }    
  //得到xml文档  
  $xmlstring   =   $sql2xmlclass->getxml();  
  //print   $xmlstring;  
  //下面开始将XML数据文档用XSLT转换成HTML文档  
  $arguments   =   array('/_xml'   =>   $xmlstring,  
  '/_xsl'   =>   $xslstring  
  );  
  $xh   =   xslt_create();  
   
  $result   =   xslt_process($xh,   'arg:/_xml',   'arg:/_xsl',   null,   $arguments);  
   
  if   ($result)   {  
  return   $result;  
  xslt_free($xh);  
  }   else   {  
  return   "转换xml数据到xsl时出错";  
  xslt_free($xh);  
  }    
  }   //end   function   getHtml()  
   
   
   
   
  //从用户信息表中查询数据的SQL语句  
  $sql   =   "select    
  nsrnm,   #代码  
  qymc,     #企业名称  
  qydh       #电话  
  from    
  yhxx       #用户信息表";  
  //   执行SQL语句  
  $res   =   $db->query($sql);  
  if   ($db->isError($res))    
  {  
  echo   "执行SQL语句时出错";  
  }  
  while   ($row   =   $res->fetchRow(DB_FETCHMODE_ASSOC))  
  {          
  $data[]   =   $row; //将数据放到一个数组中  
  }  
  //print_r($data);  
  //大家可以看到数据已经放到了一个多维的数组中了  
  //至此,我们的程序已经基本上完成了,再接下去,我们要定义显示数据的页面  
  //打开你的DW   或   FrontPage   XP,制作显示的页面,我做了一个,并提供给大家下载  
   
  //我们制作的数据显示页面文件为:browesData.html  
  /*  
  这是我们平时要显示的数据列表界面  
  <html>  
  <head>  
  <meta   http-equiv="Content-Language"   content="zh-cn">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>数据浏览</title>  
  </head>  
   
  <body>  
  <table   border="1"   cellpadding="0"   cellspacing="0"   style="border-collapse:   collapse"   bordercolor="#111111"   width="100%"   id="AutoNumber1">  
          <tr>  
                      <td   width="21%"   align="center"   bgcolor="#C0C0C0">代码</td>  
                      <td   width="50%"   align="center"   bgcolor="#C0C0C0">企业名称</td>  
                      <td   width="29%"   align="center"   bgcolor="#C0C0C0">电话</td>  
          </tr>  
          <tr>  
                      <td   width="21%"> </td>  
                      <td   width="50%"> </td>  
                      <td   width="29%"> </td>  
          </tr>  
  </table>  
  </body>  
  </html>  
   
   
  */  
   
  //我把它加工成一个XSLT格式的HTML文档  
  /*  
  <?xml   version="1.0"   encoding="gb2312"?>  
  <xsl:stylesheet   version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:output   method="html"   version="1.0"   encoding="GB2312"   indent="yes"   />  
  <xsl:template   match="/">  
  <html   xmlns="http://www.w3.org/1999/xhtml">  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312"   />  
  <title>数据浏览</title>  
  </head>  
  <body>  
  <table   border="1"   cellpadding="0"   cellspacing="0"   style="border-collapse:   collapse"   bordercolor="#111111"   width="100%"   id="AutoNumber1">  
          <tbody>  
          <tr>  
                      <td   width="21%"   align="center"   bgcolor="#C0C0C0">代码</td>  
                      <td   width="50%"   align="center"   bgcolor="#C0C0C0">企业名称</td>  
                      <td   width="29%"   align="center"   bgcolor="#C0C0C0">电话</td>  
          </tr>  
   
    <xsl:for-each   select="root/result/row">    
           
          <tr>  
                      <td   width="21%"> <xsl:value-of   select="nsrnm"   /></td>  
                      <td   width="50%"> <xsl:value-of   select="qymc"   /></td>  
                      <td   width="29%"> <xsl:value-of   select="qydh"   /></td>  
          </tr>  
   
   
  </xsl:for-each>    
   
   
  </tbody>    
   
   
  </table>  
  </body>  
  </html>  
  </xsl:template>  
  </xsl:stylesheet>  
   
   
  */  
  $htmlFile="browesData.html" ;  
  $htmlStr   =   readXsl($htmlFile); //将xslt格式的HTML文档读取到变量中  
  echo   getHtml($data,   $htmlStr) ;  
   
  //程序结束  
   
  ?>
 

标签:

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录