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 相关文章推荐
增加反向链接的101个方法 站长推荐
Jan 31 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
May 02 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
php curl选项列表(超详细)
Jul 01 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
CI框架安全类Security.php源码分析
Nov 04 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
yii框架无限极分类的实现方法
Apr 08 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
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
javascript引导程序
2008/10/26 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js获取视频时长代码
2014/04/10 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Tornado 多进程实现分析详解
2018/01/12 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
pymysql的简单封装代码实例
2020/01/08 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Python识别处理照片中的条形码
2020/11/16 Python
致共产党员倡议书
2014/04/16 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python