用mssql + xml + xslt + js生成动态树(二叉树)

zhangjsl 2004-08-02 11:34:47
本想把这篇文章放到blog上的,结果csdn的blog太难用了……
这几天公司要求做链接树,于是在网上找了一些代码,研究了一下,发现用xml来实现树的管理比较方便,于是自己写了一个简单例子,没有用做效果,希望能抛砖引玉,让大家更多探讨
库结构
w_index /目录表
i_id id
i_title 目录内容
i_bid 所属ID
i_level 层次
这个应该是无级树结构常用的一种数据库结构了,不做过多解释
现在将这个数据库的内容取出,并生成xml
<%
strsql = "select i_id,i_title,i_bid,i_level from w_index"
'设置conn 略
set rs = conn.execute(strsql)
set objXMLDOM = Server.CreateObject("MSXML2.DOMDocument")
Set objXMLDOM_XSLT = server.CreateObject("MSXML2.DOMDocument")
objXMLDOM_XSLT.load(Server.MapPath("createtree.xsl")) '将rs生成的XML格式化为树形
rs.Save objXMLDOM,1
rs.Close
Response.Write "<?xml version='1.0' encoding='GB2312'?>"
strCleanXML = objXMLDOM.transformNode(objXMLDOM_XSLT)
response.write strCleanXML
'树生成完毕,如果树的结构基本不变的话,可以考虑将这个XML保存成一个XML文件,这样使用时就不必重复读取数据库了
%>
createtree.xsl
?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="/xml/rs:data/z:row[@i_bid=0]"/>
</root>
</xsl:template>
<xsl:template match="/xml/rs:data/z:row">
<row>
<xsl:apply-templates select="@*"/>
<xsl:choose>
<xsl:when test="count(/xml/rs:data/z:row[@i_bid=current()/@i_id])=0">
<xsl:attribute name="notetype">page
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="notetype">node
</xsl:attribute>
<xsl:apply-templates select="/xml/rs:data/z:row[@i_bid=current()/@i_id]"/>
</xsl:otherwise>
</xsl:choose>
</row>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>

输出的XML为:
<?xml version="1.0" encoding="GB2312" ?>
- <root xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
- <row i_id="1" i_title="热门赛事新闻" i_bid="0" i_level="0" notetype="node">
- <row i_id="5" i_title="欧洲杯最新报道" i_bid="1" i_level="1" notetype="node">
<row i_id="6" i_title="冠军杯联盟杯" i_bid="5" i_level="1" notetype="page" />
<row i_id="7" i_title="五大联赛看台" i_bid="5" i_level="1" notetype="page" />
<row i_id="8" i_title="其它地区赛事" i_bid="5" i_level="1" notetype="page" />
</row>
</row>
- <row i_id="2" i_title="国内足球新闻" i_bid="0" i_level="0" notetype="node">
<row i_id="9" i_title="中超新闻" i_bid="2" i_level="1" notetype="page" />
<row i_id="10" i_title="中甲新闻" i_bid="2" i_level="1" notetype="page" />
<row i_id="11" i_title="国家队" i_bid="2" i_level="1" notetype="page" />
<row i_id="12" i_title="国奥队" i_bid="2" i_level="1" notetype="page" />
<row i_id="13" i_title="海外球员" i_bid="2" i_level="1" notetype="page" />
</row>
- <row i_id="3" i_title="专业赛事推荐" i_bid="0" i_level="0" notetype="node">
<row i_id="14" i_title="欧洲赛事" i_bid="3" i_level="1" notetype="page" />
<row i_id="15" i_title="其它赛事" i_bid="3" i_level="1" notetype="page" />
<row i_id="16" i_title="飞火看盘" i_bid="3" i_level="1" notetype="page" />
<row i_id="17" i_title="注码分布" i_bid="3" i_level="1" notetype="page" />
<row i_id="18" i_title="标盘推荐" i_bid="3" i_level="1" notetype="page" />
</row>
- <row i_id="4" i_title="即时赔率备忘" i_bid="0" i_level="0" notetype="node">
<row i_id="19" i_title="威廉希尔" i_bid="4" i_level="1" notetype="page" />
<row i_id="20" i_title="立博" i_bid="4" i_level="1" notetype="page" />
<row i_id="21" i_title="澳门彩票" i_bid="4" i_level="1" notetype="page" />
<row i_id="22" i_title="易胜博" i_bid="4" i_level="1" notetype="page" />
</row>
- <row i_id="23" i_title="即时比分查询" i_bid="0" i_level="0" notetype="node">
<row i_id="24" i_title="意甲比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="25" i_title="西甲比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="26" i_title="英超比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="27" i_title="德甲比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="28" i_title="法甲比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="29" i_title="欧洲杯比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="30" i_title="冠军杯比分" i_bid="23" i_level="1" notetype="page" />
<row i_id="31" i_title="其它赛事比分" i_bid="23" i_level="1" notetype="page" />
</row>
- <row i_id="35" i_title="公告:欧洲杯幸运大抽奖new!" i_bid="0" i_level="0" notetype="node">
<row i_id="39" i_title="欧洲杯幸运大抽奖" i_bid="35" i_level="0" notetype="page" />
</row>
<row i_id="40" i_title="欧洲杯烽火(hot)" i_bid="0" i_level="0" notetype="page" />
<row i_id="41" i_title="球星VS性感美女" i_bid="0" i_level="0" notetype="page" />
- <row i_id="42" i_title="我的足彩" i_bid="0" i_level="0" notetype="node">
<row i_id="44" i_title="进球彩对阵表" i_bid="42" i_level="1" notetype="page" />
<row i_id="45" i_title="胜负彩对阵表" i_bid="42" i_level="1" notetype="page" />
<row i_id="46" i_title="足彩即时比分" i_bid="42" i_level="1" notetype="page" />
<row i_id="47" i_title="进球彩结果" i_bid="42" i_level="1" notetype="page" />
<row i_id="48" i_title="胜负彩结果" i_bid="42" i_level="1" notetype="page" />
</row>
</root>

然后在客户端用JS取这个XML内容,依照节点类型(nodetype)来控制创建的行为和设置CSS,这样的代码网上很多,就不再重复了。
此贴仅仅做参考,如有更好的想法和思路,请大家跟贴
...全文
205 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧