- 浏览: 342298 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
yin_bp:
不建议使用session复制机制,推荐bboss会话共享框架, ...
JBOSS7 集群和Session复制配置笔记 -
heipacker:
建议:java(多线程)实现高性能数据同步==>java ...
java(多线程)实现高性能数据同步 -
yang_min:
582399232 写道你的脚本貌似不能用呀?service ...
JBOSS7学习笔记 -
yang_min:
582399232 写道感觉这个脚本不好#shutdown=' ...
JBOSS7学习笔记 -
yang_min:
582399232 写道博主能问几个问题吗?1.按照你的步骤执 ...
JBOSS7 集群和Session复制配置笔记
XML是可扩展标记语言(地球人都知道),其文档内容具有良好的可读性。我们通常在项目中保存一些系统配置数据,也就它来做一些数据的交换。
而XSL本身也是xml,这是一种可扩展的样式表语言。 它为xml的数据表示和数据的转换定义一组标准的标签语言。我们可以用 xsl来控制xml数据显示为特定格式或者转换为特定媒体。
下面写个简单的例子来看看xml与xsl的关系(这个例子来自于Microsoft的xml文档)。我们有一个xml文档,:
<pre> XML(hello.xml) <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="hello.xsl"?> <hello-world> <greeter>An XSLT Programmer</greeter> <greeting>Hello, World!</greeting> </hello-world> </pre>
这个xml文档第2行是指定处理文档用的样式表文件。后面的是文档数据。下面的是XSL文件:
<pre> XSL(hello.xsl) <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/hello-world"> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <H1><xsl:value-of select="greeting"/></H1> <xsl:apply-templates select="greeter"/> </BODY> </HTML> </xsl:template> <xsl:template match="greeter"> <DIV>from <I><xsl:value-of select="."/></I> </DIV> </xsl:template> </xsl:stylesheet> </pre>
我们先将这两个文件存在同一个目录。因为在xml文档中指定了样式表文件,当我们从IE中打开xml文件时,IE会自动调用相应的XSL文件来处理xml数据。从xsl文档中我们看到很多熟悉的文字,没错,它们就是html标签。我们通过这个xsl文件将xml数据以html形式表现出来。这时我们会从IE中看到
Hello,World!
from An XSLT Programmer
XSL语言功能强大而奇妙。从上面的例子中,我们可以初步了解到,一个xsl文档中使用了很多类似"xsl:xxxxx"这样的标签,这些标签就是xsl语言的部分。一个xsl文档至少是由一个模板组成的,xsl的解析引擎会负责将xml数据按xsl的模板定义来转换。就像上面的例子,就有两个模板:
<xsl:template match="/hello-world">
<xsl:template match="greeter">
模板可以用来处理特定的xml数据,通过match属性来指定。match属性里的是一个xpath的表达式(xpath在本文先不作讨论),通过它可以匹配相关的xml节点给模板来处理。我们看到在模板中,大部分内容都是html的内容,只有少量的<xsl:xxxx>这样的标签,非<xsl:xxxx>标签的内容,在xsl引擎解析时,会原文保留。当遇到<xsl:xxxx>标签才做处理。像上面的例子中,有一个<xsl:value-of select="greeting"/>标签,它是将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" ?>
<!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结构的例子:
<pre> <tree> <menu text="一级菜单" icon="xxx.gif" folded="false"> <menu text="二级菜单1" icon="yyy1.gif" url="www.yyy1.com" target="_blank"/> <menu text="二级菜单2" icon="yyy2.gif" url="www.yyy2.com" target="_blank"/> </menu> </tree> </pre>
menu节点具有5种属性,分别是:
text,用来作为菜单的显示文字
icon,菜单的图标
url, 点击菜单后的地址
target, 显示地址的目标框架
folded, 如果是菜单还有子菜单的话,此属性决定菜单是否折叠。
其中,text属性是必须,其它的根据需要取舍。
根据我们的DTD, 我们可以把这个菜单定义的任意复杂,可以嵌套任意层,程序实现上看起来有点复杂。还好,我们可以使用 xsl做一个模板,让模板自动递归调用,显示任意级数的菜单。我们的模板是这样:
<pre> <xsl:template match="menu"> <tr bgcolor="#FFFFFF"> <td style="padding-left: 15px"> <div style="cursor: default"> <xsl:attribute name="onclick">toggle(<xsl:value-of select="generate-id (@text)"/>,flagimg<xsl:value-of select="generate-id(@text)"/>)</xsl:attribute> <xsl:if test="count(./*)>0"> <xsl:choose> <xsl:when test="@folded='true'"> <img src="c.gif"> <xsl:attribute name="id">flagimg<xsl:value-of select="generate-id (@text)"/></xsl:attribute> </img> </xsl:when> <xsl:otherwise> <img src="o.gif"> <xsl:attribute name="id">flagimg<xsl:value-of select="generate-id (@text)"/></xsl:attribute> </img> </xsl:otherwise> </xsl:choose> </xsl:if> <xsl:choose> <xsl:when test="@url"> <a> <xsl:attribute name="href"><xsl:value-of select="@url"/></xsl:attribute> <xsl:attribute name="target"><xsl:value-of select="@target"/></xsl:attribute> <xsl:if test="@icon"> <img border="0"> <xsl:attribute name="src"><xsl:value-of select="@icon"/></xsl:attribute> </img> </xsl:if> <xsl:value-of select="@text"/> </a> </xsl:when> <xsl:otherwise> <xsl:if test="@icon"> <img border="0"> <xsl:attribute name="src"><xsl:value-of select="@icon"/></xsl:attribute> </img> </xsl:if> <xsl:value-of select="@text"/> </xsl:otherwise> </xsl:choose> </div> <table> <xsl:attribute name="style"> <xsl:choose> <xsl:when test="@folded='true'">display:none</xsl:when> <xsl:otherwise>display:block</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="id"><xsl:value-of select="generate-id(@text)"/></xsl:attribute> <xsl:apply-templates/> </table> </td> </tr> </xsl:template> > </pre>
这个模板中,有一个地方用了<xsl:apply-templates/>标签,它会自动找到当前menu节点下所有的子节点并调用相应的 template. 由于menu节点下还是menu节点,当然就调用了模板自身,这就实现了所谓的递归,解决了无限级数的问题。
发表评论
-
Java压缩 解压缩zip 并解决linux下中文乱码
2012-06-13 15:00 27651:再压缩前,要设置linux模式, 需要使用第三方ant-1 ... -
关于英文操作系统中解析中文文件插入到oracle中乱码问题
2011-11-04 22:58 1354真实环境: windows 2008 英文版 weblog ... -
Java反射经典实例 Java Reflection Cookbook (初级)
2009-10-16 14:56 2788Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
判断密码的小方法(记一下不怕忘了)
2009-05-12 18:11 1311package test; import java.ut ... -
java的一些实用工具方法(用的时候随手了)
2009-03-28 16:21 1315// 将127.0.0.1 形式的IP地址转换成10进制整数, ... -
封装JNDI操作LDAP服务器的工具类(1)
2008-07-18 15:28 2438LDAP操作封装类 作者:廖武锋 MSN:liaowufe ... -
学Java应该搞懂的问题
2008-07-16 09:21 1449导读: 对于这个 ... -
Java实现获取本机上ADSL的IP
2008-05-20 15:42 2212import java.net.*; public clas ... -
多线程Java Socket编程示例
2008-05-19 09:35 18791.服务端 package sterning; ... -
对Spring做简单介绍
2007-11-05 16:46 1317Spring和Struts一样都是一 ... -
Struts,Spring,Hibernate优缺点
2007-11-05 12:06 3201.struts struts框架具有组件的模块化,灵活性和重 ... -
什么是JDBC
2007-11-05 12:05 2082JDBC, 全称为Java DataBase Co ... -
JAVA程序员之路
2007-11-04 22:41 2569很多网友问我学习Java有没有什么捷径,我说“无他,唯手熟尔” ... -
数据库时代的终结
2007-11-04 22:37 1186以数据库为核心的软件时代已经过去,数据库时代早已结束,当我看到 ... -
致面向对象技术初学者的一封公开信
2007-11-04 22:35 1202致面向对象技术初学者 ... -
Java EE/J2EE面向对象实战之道
2007-11-04 22:12 1127经常看到不少人抱怨Java ... -
经典Java基础问题!!!!
2007-11-03 00:02 1342对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果 ... -
什么是ant?
2007-11-02 23:28 2407ant Ant是一种基于Java的build工具。理论上来说, ... -
什么是Ruby
2007-11-02 21:06 1301Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷 ... -
转发和重定向的区别
2007-11-02 20:38 4740转发和重定向的区别 不要仅仅为了把变量传到下一个页面而使用s ...
相关推荐
在网页开发中,XML通常与XSL(eXtensible Stylesheet Language)和JavaScript结合使用,来实现动态内容展示,比如构建无限极菜单。 XSL是一种样式表语言,用于转换XML文档的结构和格式。它包括XSLT(XSL ...
"XML+xsl讲XML文档的内容用xsl建表"的主题意味着我们将学习如何使用XSLT将XML文档的内容转换成表格形式。这通常涉及到以下步骤: 1. **理解XML结构**:首先,需要熟悉XML文档的结构和元素关系,以便确定如何在表格...
总结一下,Xsl与xml的结合使用是将结构化的XML数据转换为不同格式,如网页、报表等的关键技术。通过定义XSL样式表,我们可以灵活地控制XML数据的展现形式,实现数据的动态渲染。在给定的例子中,`bbs.xml`和`bbs_css...
这是一个用XML+XSL生成一个灵活的树形菜单。其中用li和ul嵌套进行菜单的展示,用js控制子菜单的隐藏和显示,css来...如果要生成多级菜单可以修改xml文件,将item节点下的name改为所要添加子菜单的名称,然后修改xsl文件。
通过深入学习和掌握XML与XSL,开发者可以构建更加灵活、可扩展的Web应用程序,有效地管理和展示数据。实践中的实例学习有助于更好地理解和运用这两种技术,因此,提供的压缩包文件中的实例是值得Web开发者研究和参考...
同时,可能会涉及到与服务器端脚本结合使用XML和XSLT的实际案例,这对于开发动态网站和构建数据驱动的应用程序至关重要。 总的来说,这个压缩包提供的资源对于想要学习和掌握XML和XSL编程的初学者来说是一份宝贵的...
在本场景中,XML被用来实现动态菜单功能,这是一个常见的网页开发技术,旨在提高用户体验,使用户界面更加直观和易用。动态菜单通常会根据用户的行为、权限或者特定条件进行实时更新。 在XML中,我们可以通过定义一...
3. **XML与XSL(可扩展样式表语言)** XSL是一种更强大的工具,不仅处理样式,还能转换XML数据。XSLT(XSL转换)允许我们定义一套规则,将XML数据转换成其他格式,如HTML、PDF或新的XML文档。以下是一个简单的XSL...
标题中的“用XSL把XML转化在EXCEL导出”是指使用XSL(Extensible Stylesheet Language)转换技术,将XML(Extensible Markup Language)数据转换成Excel电子表格格式的过程。这种转换通常是为了便于数据分析、报表...
本文主要介绍了DTD、CSS、XSL与XML文档之间的关系,以及如何将ACCESS数据库的数据直接转换为网页或XML文档。这些技术的应用有助于提高数据处理的效率和一致性,对于实现跨平台数据交换具有重要意义。
1. 使用XML存储结构化数据。 2. 通过XSL将XML转换为HTML,创建可编辑的表单。 3. 利用ASP处理服务器端的用户输入,更新XML文档。 4. 保证跨平台兼容性,尤其是考虑到Netscape浏览器的限制。 5. 结合XMLDOM对象进行...
本主题主要关注如何使用XSL解析XML以生成表格,并通过JavaScript实现表格行的动态隐藏与显示。 首先,我们要理解XSL的工作原理。XSL由三部分组成:XSLT(XSL Transformations),XPath(XML Path Language)和XSL-...
在这个“ASP.NET通过xsl把xml转化为xhtml”的示例中,我们将探讨如何利用ASP.NET的XslTransform类或者XslCompiledTransform类实现这一过程。这两个类都是.NET Framework提供的,用于执行XSLT(XSL Transformation)...
在这个名为"treemenu"的项目中,作者通过结合XML和XSL,实现了动态生成无限级树形菜单的功能,这对于构建复杂的网站导航系统尤其有用。下面我们将深入探讨这些技术以及它们如何协同工作。 XML是一种标记语言,其...
在本案例中,提供的"**xsl2xml.java**"文件可能是一个Java程序,它实现了将XML文件根据XSL样式表转换的功能。Java中处理XML和XSLT转换通常会用到如`javax.xml.transform`这样的API,其中`TransformerFactory`用于...
当遇到带有子菜单的菜单项时,它会递归地生成嵌套的`<ul>`结构,从而实现菜单的层级展现。 在实际应用中,可以通过编程语言(如Java、Python等)或者XSLT处理器(如Saxon、Xalan等)来执行XML到XSL的转换,将XML...
XML(可扩展标记语言)...在提供的"xml-xsl"压缩包文件中,可能包含了示例XML文档和相应的XSLT样式表,可以用来实践和理解XML与XSL的交互过程。通过实际操作和解析这些文件,可以进一步加深对XML和XSL工作原理的理解。
通过分析和理解这个XSL文件,我们可以看到如何将XML的结构转换成HTML的树结构,并实现节点的展开与关闭功能。 总的来说,XSL转换XML为HTML树显示是一项常见的数据展示技术,它结合了XML的结构化特性,XSLT的转换...
XSLT是XSL的核心,它使用一系列规则(即样式表)来将XML文档转换成其他形式,如HTML、XML或者文本。这些规则定义了如何处理XML文档中的每个元素,可以进行内容重排、格式化以及添加动态内容。 4. **XPath**: ...
5. **API接口**:许多电商API使用XML作为数据传输格式,通过XSL可以将接收到的数据转换为易于处理的形式。 综上所述,XML和XSL在电子商务领域的应用广泛且深入,它们提供了一种灵活的方式来处理和展示结构化数据,...