软件项目实训及课程设计指导——应用XML XSLT技术分离Web应用系统中表示层数据和样式的实例

1、在J2EE应用系统中应用XSLT实现XML文档转换的基本过程

(1)首先,创建出目标XML格式文档文件,该XML格式文档文件代表应用系统中的数据模型

(2)其次,建立出XSLT文档文件,该XSLT文档文件代表对XML数据的显示控制

(3)最后,在XML格式文档文件中调用这个XSLT文件以便能够将XML和XSLT相互关联。

2、在J2EE应用系统中应用"XML XSLT"技术的应用示例

作者在下文中通过一个示例为读者介绍如何应用"XML XSLT"技术彻底分离Web应用系统中表示层页面中的数据和样式。

(1)首先,创建出一个XML格式文档文件

下面的代码示例中所示的XML格式文档文件是一个很简单XML格式文档,只包含一个节点的XML结构树。该XML格式文档文件的内容在实际的企业级应用系统中,可以在Web服务器端根据系统中业务处理的规则动态创建出,它代表处理结果的XML文档。

本示例中的XML文档文件名称为FirstXMLFile.xml,具体的内容请见如下的代码示例所示—— XML文档文件FirstXMLFile.xml的内容示例。

<?xml version="1.0" encoding="gb2312" ?> <firstXML>这是我在学习XSLT时所写的一个XML文档中的内容</firstXML >

(2)其次,建立出XSLT格式文档文件

该XSLT格式文档文件代表对XML文档中数据的显示风格控制,在本示例中作者所建立的XSLT文档文件的文件名称为FirstXSL.xsl,该文件中的具体内容请见如下的代码示例所示—— XSLT文档文件FirstXSL.xsl的内容示例。

<?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" version="1.0"> <xsl:template match="/"> <html> <head> <title>这是我在XSLT时所做的第一个XSLT文件示例</title> </head> <body> <p><xsl:value-of select="firstXML"/></p> </body> </html> </xsl:template> </xsl:stylesheet>

为了方便读者理解上面示例代码中的XSLT文档文件中的标签内容的含义,作者在下文中对其中的主要标签元素加以解释说明。

1)<xsl:stylesheet>标签定义一个样式表

<xsl:stylesheet>标签的主要功能是将此XSLT文档作为一个样式表 (StyleSheet) 来处理,从而明确地定义了本XSLT文档的用途。

按照XSLT文档语法的规定,所有的XSL命令都必须包含在<xsl:stylesheet>起始标签和</xsl:stylesheet>结束标签之间,也就是说这个<xsl:stylesheet>标签界定了输出转换后的XSL样式的内容。

其中的xmlns:xsl属性是一个名字空间声明(XSL样式表中所有的指令都必须注明属于http://www.w3.org/TR/WD-xsl这个XSL专属的名称空间),和XML格式文档中的名字空间的使用方法一样,用来防止标签元素名称重复和混乱。其中的前缀xsl的意思是文档中使用的标签元素遵守W3C的XSLT语法规范;最后的version属性说明样式表只采用XSLT 1.0的标准功能,这也是目前仅有的标准。

当然,也可以在模板HTML页面中使用CSS层叠样式表技术,此时应该在XSLT文档中添加如下的引用语句, 当然也就不再需要<xsl:stylesheet>标签。

<link rel="stylesheet" type="text/css" href="cssStyleFile.css"/>

2)<xsl:template>标签定义一个模板规则

XSLT模板把XSLT文档的设计细化成一个个的模块(每一个模块定义为一个"template",由<xsl:template>标签定义此模块),最后再把这些模块组合串接成一个完整的XSLT文档文件。这样的语法规则能够实现很好地将数据分块和隔离。

另外,应用这种方案可以使开发者先从整体上考虑整个XSLT文档的设计,然后再把总体表现形式进一步细化成不同的模块和子模块,再分别具体设计这些模块,最后把它们整合和串接在一起。

<xsl:template>标签中的属性match="/"说明在XML源文档中这个模板规则作用的起点。"/"是一种XPath(XML Path Language,XML路径语言)语法,这里的"/"代表XML源文档结构树的根(root)标签。

3)<xsl:template>标签定义其中的内容

当模板规则被触发,模板的内容就会控制输出的结果。在上面的代码示例中,模板大部分内容由HTML标签元素和文本构成。只有<xsl:value-of>标签元素是应用XSLT语法规则的标签,这里的<xsl:value-of>标签的主要作用是拷贝原XML源文档中的一个标签节点的值到输出文档中。而其中的select属性则详细指定要处理的XML标签节点名称——但这是遵守XPath(XML Path Language,XML路径语言)语法规则。

其中的值"firstXML"的意思就是寻找XML文档根标签节点名为firstXML的标签元素(也就是XML文档中的<firstXML>标签),并用此模板来处理这个<firstXML>标签节点——也就是找到<firstXML>标签元素,然后将该标签元素的值"这是我在学习XSL时所写的一个XML文档中的内容"按模板的样式定义拷贝到输出文件(本示例为HTML文档文件)。因此,转换后的HTML文档结构清晰、 修改也方便。

当然,读者也可以用IE5.0以上版本的浏览器或者其它浏览器打开这个FirstXSL.xsl文件,将能够看到如下示图所示的XSL的结构树——因为XSL文档本身也是XML格式的文档,同样也要遵守XML格式的文档的各种语法规则。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(1)

(3)最后,在XML格式文档文件中调用这个XSLT文件以便能够将XML文档(代表软件应用系统中的业务处理后的结果数据)和XSLT(代表对这些结果数据在最终的目标终端设备中如何显示和输出)相互关联

没有在上面所示的XML文档文件中添加对XSLT关联之前的执行结果状态为如下示图所示的显示结果——无格式化的XML文档文件的结果,这不利于人类阅读和理解——因为在数据中还包含有大量的XML格式文档的标签。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(2)

然后在前面所示的XML格式文档文件中调用这个XSLT文件——这只需要修改FirstXMLFile.xml中的代码为下面的内容以增加格式化转换的功能实现代码。最终的FirstXMLFile.xml文件的内容请见如下代码所示,请读者注意其中黑体标识的标签—— 对FirstXMLFile.xml文件添加格式转换(引用前面的FirstXSL.xsl样式表文件)之后的文件内容示例如下:

<?xml version="1.0" encoding="gb2312" ?> <?xml-stylesheet type="text/xsl" href="FirstXSL.xsl"?> <firstXML>这是我在学习XSLT时所写的一个XML文档中的内容</firstXML >

然后再在浏览器中浏览FirstXMLFile.xml文件,将出现如下示图所示的内容——由于在微软的IE5.5以上版本的浏览器中已经内嵌了MSXML3解释器,因此能够正常地解析。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(3)

请读者注意,如果读者在浏览器中只看到XML结构树(请参考前一示图所示的显示结果),而不是单独的"这是我在学习XSLT时所写的一个XML文档中的内容"字样,则说明读者机器中的浏览器没有安装MSXML3版本的XML Processor(支持XSLT技术的XML 处理器)程序。

读者可以对比前面的两个示例图,明显地能够了解到对XML文档文件经过XSLT的格式转换后在浏览器中能够按照设计者的要求显示输出,并且有利于人类的阅读和理解。

(4)将它们部署到应用服务器中执行

为了能够让读者了解XML XSLT技术在Web应用系统开发中的具体应用,也可以将前面的代码所示的XML文档文件FirstXMLFile.xml和XSLT格式文档文件FirstXSL.xsl都部署到应用服务器(如 Tomcat等)中。然后在浏览器中对该FirstXMLFile.xml文件进行请求,比如请求的URL地址为:http://127.0.0.1:8080/WebBBS/FirstXMLFile.xml将能够看到如下示图所示的结果——与前面示图所示的在本地浏览的结果是一致的。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(4)

读者从上面示例图所示的结果应该能够理解,XML与XSLT相互配合,同样也能够构造服务器端的应用。而且同一个XML格式的文档文件,只需要提供不同的XSLT格式文档文件,将可以产生出不同的显示效果。据此,对于不同的终端设备, 软件应用系统的开发人员可以设计出不同的XSLT文档文件就可以实现相同的数据在不同的终端设备中显示出不同的风格。

4、体验"XML XSLT"技术中的格式和数据分离的优点

读者只需要将前面代码示例所示的XSLT文档文件FirstXSL.xsl中的如下的标签内容:

<p><xsl:value-of select="firstXML"/></p>

改变为如下的标签内容:

<p><B><xsl:value-of select="firstXML"/></B></p>

也就是对显示输出的文本内容应用粗体样式控制,然后再在Web浏览器中浏览修改后的页面浏览的效果,将能够看到如下示图所示的粗体文字的显示状态内容。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(5)

因此,如果对XML文档文件中的内容:"<firstXML>这是我在学习XSL时所写的一个XML文档中的内容</firstXML >"应用各种不同的XSLT模板处理技术,将可以产生出满足不同应用需求要求的显示效果、和满足不同的显示设备的要求,而且"格式控制"和"数据内容"是相互分离。

当然,为了简化本示例的实现代码,作者在本文中直接将XML文档文件的内容设置为规定内容,其实该XML格式文档文件的数据内容完全可以在Web服务器端由相关的程序动态创建或者对原有的XML文档文件进行修改——XML文档文件中的数据也可以来自于物理数据库系统的数据库表。

因此,软件应用系统的开发人员可以根据系统业务处理的需要,动态地创建代表业务处理结果的XML格式文档,然后再针对不同的显示设备或者终端(如电脑屏幕、手机屏幕、电视屏幕等)提供不同版本的XSLT模板,从而可以保证同一个软件应用系统的处理结果能够适用于不同的终端设备,这将大大地扩大了软件应用系统的应用场景。

为了能够让读者对"XML XSLT"相关技术的应用有一定的感性认识,作者给出如下两个示例图,它们的XML格式的文档是同一个XML文件,但通过提供不同的XSLT模板文件,最后在同一浏览器中显示出不同的结果。这说明了XSLT模板的数据转换功能的应用效果。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(6)

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(7)

5、利用Macromedia Dreamweaver工具以可视化方式创建XSLT文档文件

读者在实际的项目开发中,如果Web应用系统的表示层开发中需要应用XML XSLT技术,为了能够提高开发效率,一般可以应用一些可视化工具如Macromedia Dreamweaver页面开发工具创建XSLT格式文档文件。

作者在下文中为读者简要介绍如何利用Macromedia公司的Web页面开发工具Dreamweaver软件以可视化方式创建XSLT文档文件。

(1)先建立系统中所需要的XML文档文件

读者只需要在Dreamweaver页面开发工具程序中选择【新建文档】菜单,然后弹出如下示例图所示的【新建文档】对话框。读者只需要在该对话框中的【页面类型】选择框中选中【XML】类型页面,将自动地创建出一个空的XML文档文件。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(8)

(2)其次建立系统中所需要的XSLT格式文档文件

读者同样也只需要在Dreamweaver页面开发工具程序中选择【新建文档】菜单,然后弹出下图所示的【新建文档】对话框。读者只需要在该对话框中的【页面类型】选择框中选中【XSLT(整页)】类型页面,将自动地创建出一个空的XSLT文档文件。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(9)

然后Dreamweaver页面开发工具程序自动要求绑定XML数据源,并弹出下图所示的【定位XML源】对话框,读者只需要选定在前面示例图中所生成的XML文档文件。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(10)

(3)在XSLT文档文件中绑定XML文档文件中的目标数据

读者可以在Dreamweaver页面开发工具程序中选择【插入记录】菜单中的【XSLT对象】子菜单的各个下一级菜单项目,在XSLT文档文件中插入各种控制标签——请见下图所示的操作过程的结果截图。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(11)

当然,也可以直接在右面的绑定面板中将可使用的字段直接拖到XSLT文档文件窗口中,并且快速选定需要循环的部分,最后将自动地插入XSLT循环控制标签——请见下图所示的操作过程的结果截图。

xml编程详解(XSLT技术分离Web应用表示层数据和样式的实例)(12)

(4)将XSLT文档文件关联到目标XML文档文件中

读者最后只需要将XSLT文档文件关联到目标XML文档文件中,请读者参考前面代码示例中的黑体标识的标签。最后再打开XML文件并附加上对应的目标XSLT样式表文件,然后存盘保存。

如何应用“XML XSLT”技术分离Web表示层数据和样式

如何应用CSS Div分离Web表示层数据处理逻辑和展现逻辑

如何正确应用Web MVC架构模式分离表示层和模型层耦合关系

如何应用策略设计模式分离JDBC数据库连接中的外部环境信息

如何应用策略设计模式的思想设计通用的数据库连接类

,