[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

用 XSLT 转换 SQL 记录, 生成无限级树

上一篇:我的天老爷呀,怎么说冷就冷啊。
下一篇:[心缘地方]同学录--增加管理功能:修改成员密码

添加日期:2005-4-7 23:27:11 快速返回   返回列表 阅读5848次
From:http://w3.org.cn/lex/?q=node/10
Author:lexrus

我先从数据库里描述树枝关系的表中取出所有记录, 并生成 sqloutput.xml 如下:
<?xml version="1.0" encoding="utf-8"?>
<table>
    <record id="1" name="Linux"/>
    <record id="2" name="BSDs"/>
    <record id="3" name="Gentoo" parent="1"/>
    <record id="4" name="Slackware" parent="1"/>
    <record id="5" name="Slax" parent="4"/>
    <record id="6" name="Slackintoch" parent="4"/>
    <record id="7" name="FreeBSD" parent="2"/>
    <record id="8" name="OpenBSD" parent="2"/>
    <record id="9" name="Slax 5.0" parent="5"/>
    <record id="10" name="Slax Kill Bill" parent="5"/>
</table>

然后又写了 sqlml2xhtml.xslt 如下, 跟据 parentId 和 id 属性进行模板匹配:
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates select="//record[not(@parent)]"/>
    </xsl:template>
    <xsl:template match="//record">
        <xsl:param name="id" select="@id"/>
        <ul>
            <li><xsl:value-of select="@name"/></li>
            <xsl:apply-templates select="//record[@parent=$id]"/>
        </ul>
    </xsl:template>
</xsl:transform>

最后编写转换程序 transform.php 如下:
<?php
$xh=xslt_create();
echo xslt_process($xh, 'sqloutput.xml', 'sqlml2xhtml.xslt');
?>

最后看到的结果是这样的:

<ul>
<li>Linux</li>
<ul>
<li>Gentoo</li>
</ul>
<ul>
<li>Slackware</li>
<ul>
<li>Slax</li>
<ul>
<li>Slax 5.0</li>
</ul>
<ul>
<li>Slax Kill Bill</li>
</ul>
</ul>
<ul>
<li>Slackintoch</li>
</ul>
</ul>
</ul>
<ul>
<li>BSDs</li>
<ul>
<li>FreeBSD</li>
</ul>
<ul>
<li>OpenBSD</li>
</ul>
</ul>
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved