php与XML、XSLT、Mysql的结合运用实现代码


Posted in PHP onNovember 19, 2009

使用php中的xml与xslt要用到一些dll库,
extension=php_domxml.dll //操作XML的函数库
extension=php_iconv.dll //转码用的,比如将GB2312的转成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/libiconv/下载关于Iconv的源码
二 php与XML、XSLT、Mysql的结合运用,初级篇
下面我要讲的是一个简单的从数据库中抽取数据,生成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 ('310109040111985', '乔家饮食发展有限公司', '8621-63346626');
INSERT INTO yhxx VALUES ('310104040221736', '上海嘉陵贸易有限公司', '74292546');
INSERT INTO yhxx VALUES ('310108040331576', '翡翠艺术公司', '54861465');

接下来我开始写抽取数据的程序与显示数据的页面
为了使大家都能明白,我使用最简单的方法来写程序
程序文件名称:browesData.php
页面文件名称:browesData.html
程序及页面文件提供下载,本程序已经在win2000、mysql下通过测试
代码见下一页

如果大家对此技术感兴趣,我再为大家讲一下php与xml、xslt、数据库结合更深一步的应用

<?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内容 
* http://knowsky.com 
* @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) ; 
//程序结束 
?>
PHP 相关文章推荐
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
用PHP为SHOPEX增加日志功能代码
Jul 02 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
20个PHP常用类库小结
Sep 11 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PHP addcslashes()函数讲解
Feb 03 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php 静态变量的初始化
Nov 15 #PHP
PHP 程序员的调试技术小结
Nov 15 #PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 #PHP
php $_SERVER当前完整url的写法
Nov 12 #PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 #PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 #PHP
php 分库分表hash算法
Nov 12 #PHP
You might like
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
PHP中each与list用法分析
2016/01/08 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python生成日历实例解析
2014/08/21 Python
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
如何使用Python调整图像大小
2020/09/26 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
领导党性分析材料
2014/02/15 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
服务明星事迹材料
2014/12/29 职场文书
考研英语复习计划
2015/01/19 职场文书
护士节慰问信
2015/02/15 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript