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学习资源和链接.
Dec 05 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
PHP数字格式化
Dec 06 PHP
PHP开发负载均衡指南
Jul 17 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
PHP调用API接口实现天气查询功能的示例
Sep 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发送post请求的三种方法
2014/02/11 PHP
PHP微信红包API接口
2015/12/05 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python如何查看系统网络流量的信息
2016/09/12 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
python向图片里添加文字
2019/11/26 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
草船借箭教学反思
2014/02/03 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python