用XSL与XML实现多级树形菜单

原创 2004年09月16日 16:05:00

XSL语言功能强大而奇妙。从前面的例子中,我们可以初步了解到,一个xsl文档中使用了很多类似"xsl:xxxxx"这样的标签,这些标签就是xsl语言的部分。一个xsl文档至少是由一个模板组成的,xsl的解析引擎会负责将xml数据按xsl的模板定义来转换。就像上面的例子,就有两个模板:
<?xml:namespace prefix = xsl />

模板可以用来处理特定的xml数据,通过match属性来指定。match属性里的是一个xpath的表达式(xpath在本文先不作讨论),通过它可以匹配相关的xml节点给模板来处理。我们看到在模板中,大部分内容都是html的内容,只有少量的这样的标签,非标签的内容,在xsl引擎解析时,会原文保留。当遇到标签才做处理。像上面的例子中,有一个标签,它是将select属性指定的greeting节点输入到当前位置。通过xml文档我们看到greeting节点值是“Hello, World!”,输出时它正好在html的H1标签当中,所以它当然以大号的黑体字来显示了。
 
常用的xsl标签有很多,常用到的一般有:
xsl:value-of (选择节点并输出)
xsl:apply-templates (对匹配的节点应用相应的模板)
xsl:template (模板定义)
xsl:if (条件判断)
xsl:choose (多条件分支)
xsl:for-each (循环)
 
利用这些xsl的标签,我们可以实现一定的‘数据结构+算法’来完成一部分工作,所以我们说,xsl是一种程序语言,关于xsl 更详细的学习,你可以看Microsoft的XML SDK文档,它对xml, xsl甚至xpath的内容讲的非常详细(感谢Microsoft提供这么好的文档)。
 
下面回到正题,如何用xml/xsl实现一个多级树形菜单。
我来看一下树形菜单的xml文档类型定义:
<?xml version="1.0" encoding="UTF-8" ?><?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT tree ( menu+ ) >
<!ELEMENT menu ( menu* ) >
<!ATTLIST menu text CDATA #REQUIRED >
<!ATTLIST menu icon CDATA #IMPLIED >
<!ATTLIST menu url CDATA #IMPLIED >
<!ATTLIST menu target CDATA #IMPLIED >
<!ATTLIST menu folded CDATA #IMPLIED >

通过这个定义可以看到,我们的菜单xml结构是由一个tree根结点组成。tree节点可以包含多个menu节点。而每个menu节点也可以包含多个menu节点。这样就达到多级树形结构的要求。下面来看这个xml结构的例子: 


menu节点具有5种属性,分别是:
text,用来作为菜单的显示文字
icon,菜单的图标
url, 点击菜单后的地址
target, 显示地址的目标框架
folded, 如果是菜单还有子菜单的话,此属性决定菜单是否折叠。
其中,text属性是必须的,其它的根据需要取舍。

全文请看:http://www.javagarden.org

截图:

演示:http://www.javagarden.org/wiki/attachment/1/tree.xml

 

 

利用XSLT将线性XML转换为树型XML

对XML进行格式化控制,也是XSLT的常见应用之一。下面代码XSLT代码将示范如何将线性XML转换为树型XML。data.xml        format.xsl:http://www.w3.org...
  • cds27
  • cds27
  • 2006年06月08日 20:00
  • 3548

多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)

多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法) 一、问题研究的背景和意义 在Web应用程序开发领域,基于AJAX技术的Java...
  • zero_295813128
  • zero_295813128
  • 2017年03月10日 18:14
  • 1020

利用Treeview实现树形列表

  • zgqtxwd
  • zgqtxwd
  • 2008年04月24日 08:03
  • 108

xslt将word转换成html,xslt将xml转换成html

(一)后台转换,不需要jsp页面(word模板,xml模板) 1.需要下载xalan.jar(在博客资源内,免分)   2.需要xslt文件(该文件对相应格式的xml,语法参考http://www.w...
  • Truong
  • Truong
  • 2012年12月12日 17:15
  • 2076

xml+xsl与html的结合

xml+xsl与html的结合 目前的项目使用xml+xsl的方式在客户端展现具体数据,之前没有接触使用过,觉得蛮新鲜,然后就想:它跟html有何区别和联系?又有什么优缺点?如何合理的去使用? 目前浏...
  • shanjingyuan
  • shanjingyuan
  • 2015年12月17日 14:52
  • 511

xml与xsl的转换

xml文档的一大特点是可以向多种格式的文档进行转换。比如,从一种逻辑结构的xml向另一种逻辑结构的xml转换,或是转换为可浏览的html文档等。这种xml文档的数据格式转换功能由可扩展样式单语言(xs...
  • lvyuan30276
  • lvyuan30276
  • 2016年01月05日 23:28
  • 1365

[转贴]利用Treeview实现树形列表

  以前,在WEB页面中如果想使用树形控件的话,往往会有些麻烦,有时甚至要自己写代码来达到用树形列表显示数据的目的。在asp.net中,我们可以很方便地使用由微软提供的Internet Exploer...
  • snaill
  • snaill
  • 2005年03月27日 06:43
  • 973

.net组件及控件

.net组件和控件                                         DevExpress DotNetBar V4.7DevExpress DotNetBar V4.7...
  • RainyLin
  • RainyLin
  • 2008年12月03日 15:25
  • 6291

xml/xsl(1):简单使用XSL显示XML样例

test1.xml tangsheng wukong bajie sasheng bailong test1.xsl De...
  • oldmtn
  • oldmtn
  • 2014年04月28日 11:03
  • 2149

笑谈XML,xsd与xsl文件的区别

如果说xml是一叠钞票,xsd就是验钞机,看看里面有没有假钞,而xsl是点钞机,看看到底是多少钱。用xml可以不用xsd,就像花钱的时候不一定要验钞一样,但是收钱的人一般 是想要验的。而花钱的时候不能...
  • qq_net
  • qq_net
  • 2007年06月07日 10:51
  • 2580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用XSL与XML实现多级树形菜单
举报原因:
原因补充:

(最多只允许输入30个字)