近日研究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,东西不少,有的研究的。 
|