php+xml+xslt初学笔记

类别:编程语言 点击:0 评论:0 推荐:

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

本文地址:http://com.8s8s.com/it/it22999.htm