新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> XML网站展示,XML源代码,XML编程示例。 本版仅接受原创、转贴、网站展示,具体的技术交流请前往各相关版块。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML源码及示例(仅原创和转载) 』 → [原创]php+xml+xslt初学笔记 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 9487 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: [原创]php+xml+xslt初学笔记 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     dhlxmy 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:92
      门派:XML.ORG.CN
      注册:2003/12/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给dhlxmy发送一个短消息 把dhlxmy加入好友 查看dhlxmy的个人资料 搜索dhlxmy在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看dhlxmy的博客楼主
    发贴心情 [原创]php+xml+xslt初学笔记

    php+xml+xslt初学笔记
    近日研究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,东西不少,有的研究的。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/10 16:56:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML源码及示例(仅原创和转载) 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 6:44:09

    本主题贴数7,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  [原创]php+xml+xslt初学笔记(4839字) - dhlxmy,2005年3月10日
        回复:  楼主你的php的版本是多少?我的503的根本不支持php_xslt,然后自带的php_xsl居然没..(136字) - thq,2005年4月20日
        回复:  管他好不好用,收了再说(22字) - twttwt,2005年4月18日
        回复:  楼上的你用着好使么 快给俺讲讲啊(32字) - 东北星空,2005年3月30日
        回复:  谢了....正想找这个(18字) - feitianshu,2005年3月30日
        回复:  拷贝php/dlls目录下的下列文件到windows/system32下 expat.dll..(232字) - 东北星空,2005年3月30日
        回复:  收藏了(8字) - anchen0617,2005年3月21日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    68.359ms