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 AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
基于PHP一些十分严重的缺陷详解
Jun 03 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
php生成随机颜色方法汇总
Dec 03 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP后期静态绑定实例浅析
Dec 21 PHP
PHP工厂模式的日常使用
Mar 20 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
Vue如何实现组件的源码解析
2017/06/08 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python中如何打包用户自定义模块
2020/09/23 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
入党自荐书范文
2014/03/09 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书