分享
 
 
 

php+xml+xslt初学笔记

王朝php·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

近日研究php+xml+xslt的使用,查阅些许资料,特写一下笔记!

1.配置

拷贝php/dlls目录下的下列文件到windows/system32下

expat.dll

sablot.dll

2.修改php.ini

修改extension_dir指向正确的extension目录

extension_dir = c:/php/extensions

然后找到下面这行

;extension=php_sablot.dll

修改为:

extension=php_sablot.dll

其实就是加载php_sablot模块

3.测试开始了

这是一个php文件,他能够直接将数据库中的东西,转化成xml输出,暂命名test.php

<?php

$myxml = new CMySqlXML("localhost", "root", "", "test");

echo $myxml->run_sql_return_xml("SELECT * FROM astro");

class CMySqlXML {

var $host;

var $user;

var $password;

var $db;

function CMySqlXML($host, $user, $password, $db) {

$this->host = $host;

$this->user = $user;

$this->password = $password;

$this->db = $db;

}

function run_sql_return_xml($sql_string) {

$connection = mysql_connect($this->host, $this->user, $this->password,$this->db);

mysql_select_db($this->db);

$result = mysql_query($sql_string); //结果集

$doc = domxml_open_mem("<root/>"); //创建一个dom对象

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$num_fields = mysql_num_fields($result); //取得列数

$row_element = $doc->create_element(mysql_field_table($result, 0)); //创建表名的元素

$doc_root = $doc->document_element(); //确定root为文档根元素

$row_element = $doc_root->append_child($row_element); //添加列名元素到根文档

for ($i = 0; $i < $num_fields; $i++) {

$field_name = mysql_field_name($result, $i); //取字段名

$col_element = $doc->create_element($field_name); //创建元素

$col_element = $row_element->append_child($col_element);//添加元素

$text_node = $doc->create_text_node(iconv("gb2312","utf-8",$row[$field_name])); //值 为了显示方便特用iconv进行转码

$col_element->append_child($text_node); //添加入值

}

}

mysql_free_result($result);

mysql_close($connection);

//return htmlspecialchars($doc->dump_mem(false));

return $doc->dump_mem(false);

}

}

以下这是个xsl文件,功能就是将xml数据中的两个字段输出

在这里我对xslt和css做一下比较,有利于大家理解xslt

CSS同样可以格式化XML文档,那么有了CSS为什么还需要XSLT呢?因为CSS虽然能够很好的控制输出的样式,比如色彩,字体,大小等,但是它有严重的局限性,就是:

(1) CSS不能重新排序文档中的元素;

(2) CSS不能判断和控制哪个元素被显示,哪个不被显示;

(3) CSS不能统计计算元素中的数据;

换句话说,CSS只适合用于输出比较固定的最终文档。CSS的优点是简洁,消耗系统资源少;而XSLT虽然功能强大,但因为要重新索引XML结构树,所以消耗内存比较多。

因此,我们常常将它们结合起来使用,比如在服务器端用XSLT处理文档,在客户端用CSS来控制显示。可以减少响应时间。

例子中的两个字段为astroid start_date,就是为结果集中字段的名字,根据需要自行修改

<?xml version='1.0'?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>

<body>

<table border="2" bgcolor="yellow">

<tr>

<th>Title</th>

<th>Artist</th>

</tr>

<xsl:for-each select="root/astro">

<tr>

<td><xsl:value-of select="astroid"/></td>

<td><xsl:value-of select="start_date"/></td>

</tr>

</xsl:for-each>

</table>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

最后当然就是将xml和xsl进行整合,转化成html输出了,一下是php文件

<?php

$xslfile = "htdocs/xml/test.xsl"; //xsl的文件路径,如果是url可参考下行用file_get_contents()进行读取

$xmlString=file_get_contents('http://192.168.8.33/xml/test.php'); //获得xml文件内容

$xh = xslt_create();

//store xmlString in an array using a key '/_xml'

$arguments = array('/_xml' => $xmlString);

echo(xslt_process($xh, 'arg:/_xml', $xslfile, NULL, $arguments));

xslt_free($xh);

?>

以上一个简单的php+xml+xsl的程序就生成了。是一个数据表格

如果将$xslfile = "htdocs/xml/test.xsl"; 改成file_get_contents方式获取,程序就变成以下方式

<?php

$xslfile = file_get_contents('http://192.168.8.33/xml/test.xsl'); //xsl的文件路径,如果是url可参考下行用file_get_contents()进行读取

$xmlString=file_get_contents('http://192.168.8.33/xml/test.php'); //获得xml文件内容

$xh = xslt_create();

//store xmlString in an array using a key '/_xml'

$arguments = array('/_xml' => $xmlString,

'/_xsl' =>$xslfile

);

echo(xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments));

xslt_free($xh);

?>

运行的结果也是一样,先写到这里,接下去,准备仔细了解一下xslt,东西不少,有的研究的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有