软件项目实训及课程设计指导——如何应用XML+XSLT技术分离Web表示层数据和样式

1、"XML+XSLT"技术在J2EE技术平台中的应用

Java语言及相关的应用技术的产生解决了跨平台的软件应用系统的开发,但没有解决如何实现跨平台的数据交换问题。在传统的软件应用系统中,为了能够实现在不同的系统平台之间交换数据、同时还要保证数据的完整性,是相对比较麻烦的一件事情。

基于此应用的目的和要求,诞生了XML(eXtensible Markup Language,可扩展标记语言)技术。应用XML语言可以实现软件应用系统中的"内容"与"表现"相互分离,并且XML还是一种可扩展的标签语言。

如下示例图中的代码为一个定义学生信息的XML格式文档示例,读者从此示例中可以了解到XML格式文档只定义数据内容(或者应用系统处理的最终结果),而这些数据或者结果最终在什么终端设备显示、以及以什么风格显示都没有定义。

基于XML语言及应用技术的XSLT(Extensible Stylesheet Language Transformations,扩展样式表转换语言)的主要作用是将XML由一种格式转换为另一种格式(当然,也可以为其它格式,如HTML网页,纯文字等),而在J2EE Web应用系统的开发实现中,应用XSLT技术能够实现将XML格式的源文档通过转换引擎并按照XSL(eXtensible Stylesheet Lanaguage,扩展样式表语言)模板的格式最终转换输出目标HTML格式的文档。

如下示例图中的代码为某个XSLT文档文件的内容,其中包含有、等标签,同时在标签内包含有一个完整的HTML文件所应该具有的标签。这些标签都起什么作用?源XML文档最终在浏览器中的显示结果如何?

由于XSLT文档文件本身也是一个 XML格式的文档,因此它也总是由如下的XML声明语句起始:<?xml version="1.0" encoding="gb2312"?>

但由于本文章的篇幅有限,读者如果需要详细了解和学习XML、XSLT和XHTML等相关的语法、技术和应用等,可以参考作者的《J2EE Web核心技术——XHTML与XML应用开发》一书中相关章节内容。

读者也许还会有许多的疑问,比如为什么要多此一举?请读者保持耐心,继续往下阅读。

2、XSL技术概述及在J2EE系统平台中的应用

(1)XSL是什么

XSL就是可扩展样式表语言(eXtensible Stylesheet Lanaguage),XSL是参考SGML(Standard Generalized Markup Language,标准通用标记语言)中的DSSSL(Document Style Semanticsand Specification Language,文档样式语义和规范语言,它主要是用来设置SGML的表现样式)而设计的。

(2)为什么要提供XSL技术

尽管"CSS+Div"能够为Web应用系统的页面开发人员分离Web页面中的结构和风格,从而实现分离Web页面中的数据和表现。但如果其中的数据是采用XML格式表示,此时如果再继续采用CSS层叠样式表技术来为该XML格式文档数据设置表现样式,由于CSS层叠样式表采用的是与XML完全不同的一套语法规则定义,无法使用相同的XML解析器进行处理和解析,这为软件应用系统项目开发带来了许多额外的负担。

最初设计XSL的主要目的就是希望采用XML格式的语法规则提供一种为XML文档设置表现样式的新方法。而CSS的主要问题是由于没有逻辑控制的能力——CSS不能重新排序文档中的元素、也不能判断和控制哪个元素被显示、哪个不被显示、当然也不能统计计算元素中的数据等功能要求。

因此CSS层叠样式表技术一般只适合用于输出固定内容的最终Web页面文档,但CSS层叠样式表技术的主要优点是简洁、消耗系统资源少;而XSLT虽然功能强大,但因为要重新索引XML结构树,所以消耗系统内存量比较多。

在企业级的软件应用系统开发中,一般常常将CSS和XSLT两者相互结合使用。比如在Web服务器端用XSLT处理相关的文档,而在客户端则用CSS层叠样式表技术来控制数据在浏览器端的最终显示风格,这样的设计方案能够大大地减少响应时间。

3、XSL技术主要包括两个组成部分

XSL技术主要包括两个组成部分:XSLT(eXtensible Stylesheet Language Transformation)和XSL-FO(XSL Formatting Object)。

其中的XSLT主要是实现转换XML格式的文档,而XSL-FO主要是格式化XML文档。其中XSL-FO的作用就类似CSS层叠样式表技术在HTML页面中的作用,但作者在本文中重点为读者介绍XSLT相关的技术及应用。

因此,XSL从本质上可以看着为是一种可以将XML转化成其它类型语言的语言、一种可以过滤和选择XML数据的语言、一种能够格式化XML数据的语言。

4、XSLT主要是面向转换类型的应用

XSLT的主要作用是将XML文档数据内容由一种格式转换为另一种格式——比如,将XML格式的文档转换为HTML/XHTML(或者WML)等格式的文档是目前XSLT应用最为广泛的应用领域。

为什么要应用XSLT及相关的技术?因为XML格式的数据文档能够便于交换但不便于人类的阅读和理解、特别是机器自动化地阅读。因此如何能够按照人类的要求显示XML格式文档中的数据?如何实现将同一个XML格式文档中的数据在不同的显示平台中显示输出?

5、XSLT数据格式转换的基本实现原理

数据格式转换的重要思想是要把XML格式文档视为一种树形结构,转换的过程其实就是从源XML格式文档树生成结果树的过程。其中的XSL样式单定义了源XML格式文档树和结果树中对应部分的转换规则,在每条规则中包含了一个模板,并对应着一种模式——模板定义了转换的结果和转换的基本规则,而模式则规定了需要进行转换的元素或属性对象。

6、XSLT数据格式转换的实现过程

首先,将XML格式文档转换为DOM(Document Object Model,文档对象模型)树结构,这主要是利用XSLT来实现——XSLT处理器首先要做的是通过XML解析器(比如DOM或SAX)技术读取XML格式文档中的各个标签和数据,并将XML树状结构重新整理和组合产生出一个临时的树状结构,这个树状结构称为XML文档结果树。

其次,再对转换后的DOM树进行格式化并转换为其它的目标形式,这主要是利用XSL-FO来实现。XSL处理程序将这些数据转换(也就是格式化过程)为另一种格式良好的XML文件(如:WML、HTML、VoiceXML等)。

目前在微软IE浏览器中已经内嵌有实现这个转换过程的XML处理器程序。欢迎读者继续阅读作者的另一篇文章《软件项目实训及课程设计指导--应用XML+XSLT技术分离Web表示层数据和样式示例》可以详细学习和了解如何在软件应用系统开发中应用XML+XSLT技术。

7、应用XSLT实现对XML格式文档中的数据转换和合并的应用示例

为了能够让读者对"XML+XSLT"技术在企业级软件应用系统开发中的应用有感性的认识,作者在下文中给出一个典型示例加以说明。

在下面示例中的XML格式文档中的"学生信息"节点中有多个"班级"节点,可以通过XSLT中的标签把这些节点数据在一个表格单元格中显示出来,从而产生出合并数据的应用效果。当然,也可以实现其它的应用效果,读者可以自行实现。

(1)示例中所对应的XML格式文档

该XML文档文件名称为student.xml,其中在<?xml-stylesheet ?>标签中通过href属性指定对应的XSLT文件,该文件名称为student.xsl。

<?xml version="1.0" encoding="GB2312" standalone="yes" ?><?xml-stylesheet type="text/xsl" href="student.xsl" ?>                  张三姓名>            1987/10/18出生日期>            软件工程专业>            软件1班班级>            9教东201班级>      学生信息>                  李四姓名>            1988/2/18出生日期>            软件工程专业>            软件2班班级>            9教东202班级>      学生信息>软件学院学生信息>

(2)示例中的XML文档所对应的XSLT文档(student.xsl) 文件

在student.xsl 文件中应用了XSL语言中的一些标签,而XSLT文件中的标签语法大致可分为如下的三种类型:

1)选择模式,如、和 等标签,这些选择模式的标签语句将数据从XML文档中提取出来,是一种简单获得数据的方法。在这些标签中都有一个select属性,选取XML文档中特定的节点名的数据。

2)测试(识别)模式,如 和等标签,类似于编程语言中的条件语句,主要是用于条件判断和识别等用途。

3)匹配模式,如标签,它用于构建和定义一个模板。该标签中的match 属性主要是用于关联 XML文档中的标签元素和转换模板,但match 属性的值是 XPath (XML Path Language,XML路径语言)表达式(比如match="/" 则是定义整个XML格式文档);位于 标签元素内部的内容则定义了写到输出结果的 HTML标签代码。

<?xml version="1.0" encoding="gb2312" ?>XX交通大学软件学院学生信息

下面为XX交通大学软件学院学生信息表

姓名 性别 出生日期 专业 班级 专业方向

在student.xsl 文件中应用了 标签元素产生模板嵌套的应用效果,因为 标签元素可把一个模板应用于当前的标签元素或者当前标签元素的子节点中。

如果向 标签元素添加一个 select 属性,则此标签元素就会仅仅处理与由其select 属性所定义的XML标签中属性值相匹配的XML标签元素,从而可以过滤XML标签。

(3)本示例在Web浏览器中最终执行的结果

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

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

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

如何正确地创建和销毁软件应用系统中JDBC数据库连接对象实例

如何应用观察者设计模式重构系统中日志处理功能实现的程序代码

python3 xml 取标签显示内容_如何应用“XML+XSLT”技术分离Web表示层数据和样式相关推荐

  1. python多窗口显示内容_如何在一个窗口中显示多个页面?

    我正在创建一个待办程序.我有一个侧菜单(只是vbox中的qpushbutton)和一个显示内容的主窗口小部件.然而,我需要一种方法来显示不同的内容在主窗口小部件的基础上是什么侧菜单按钮按下.我尝试过使 ...

  2. 鼠标指针放置上面,显示内容_使鼠标指针远离您键入的内容

    鼠标指针放置上面,显示内容 If your mouse pointer seems to constantly get in the way while you are typing, you are ...

  3. Web前端学习笔记05:CSS_盒子模型_复合选择器_标签显示 模式_三大特性_书写规范

    文章目录 1. CSS复合选择器 1.1 后代选择器(重点) 1.2 子元素选择器 1.3 交集选择器 1.4 并集选择器(重点) 测试题 1.5 链接伪类选择器(重点) 1.6 复合选择器总结 2. ...

  4. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文

    [Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...

  5. css加了固定定位就不显示内容_前端开发必备,学好”定位“向菜鸟说拜拜

    众所周知,前端CSS中,盒模型.浮动.定位为必须掌握的三座大山. 今天就来聊聊定位的那些事. 定位是什么? 先来看看哪些场景用到定位,如下图所示,凡是有盒子压住另一个盒子的地方都可定位,因为用浮动做不 ...

  6. 用python爬取qq空间内容_用python爬取QQ空间

    原博文 2016-11-18 17:19 − 好久没写博文了,最近捣鼓了一下python,好像有点上瘾了,感觉python比js厉害好多,但是接触不久,只看了<[大家网]Python基础教程(第 ...

  7. 用python爬取qq空间内容_利用Fiddler抓包和py的requests库爬取QQ空间说说内容并写入文件...

    [Python] 纯文本查看 复制代码#!C:\Program Files\Python36 python # -*- coding: UTF-8 -*- """ @au ...

  8. mfc cedit 默认显示内容_拼多多评价不显示的几大原因,看完之后才知道是触碰了这几个环节...

    在网上购物之所以能够让很多人接受的原因其实就是因为评价这个系统的存在,虽然在网上购买商品的人都是来自全国各地的陌生人,但是,每一个购买商品的人都是有权利在商品下面留下自己对产品的使用感受的,也就是评价 ...

  9. 中间显示内容_在Excel表格中,你知道编辑栏吗?可以编辑公式和录入内容

    我们在利用Excel制作表格时,在工作区和选项卡中间有一个编辑栏(如下图所示),当选中某个单元格后,单元格中的内容会自动显示在编辑栏中,我们也可以在编辑栏中录入.修改公式或内容,但编辑栏默认只显示一行 ...

最新文章

  1. 【Springboot】日志
  2. 文本匹配_如何又好又快的做文本匹配
  3. 关于SET和UNORDER_SET
  4. 填坑-关于IIC通讯
  5. FJ的字符串(字符串)
  6. 新人开车——访问控制
  7. 红帽学习笔记[RHCSA] 第一课[Shell、基础知识]
  8. Electron 应用实战 (架构篇)
  9. [网安实践II] 实验2. 密码学实验
  10. Android触控签名软件,Android Sign Kit(app一键签名)
  11. spark 安装详细步骤
  12. 卷积码 c语言编码,利用c语言实现卷积码编码器示例
  13. 如何通过计算机侵入学校网络,如何进行局域网入侵
  14. C# 单个按钮实现暂停或继续
  15. 解决onenote同步速度慢问题
  16. 分布式文件系统 FastDFS 5.0.5 Linux CentOS 7 安装配置
  17. 学习手机软件开发学什么,怎样学?
  18. 网站信息的采集系列(一)--基本流程
  19. COSMIC度量知识整理
  20. 双头巨人 (twin)

热门文章

  1. What?Java这么神奇的lambda表达式
  2. 记录输入框本地记录用户名效果
  3. 3.1.6 OS之分页存储(页号、页偏移量等)
  4. windows和linux主机名,windows和linux下如何远程获取操作系统版本和主机名
  5. leetcode 第2高的薪水 oracle_石斛内幕第2期:铁皮石斛价格是不是要这么高?
  6. C++ public、protected、private区别
  7. 怎么用python实现回归_Python使用sklearn实现的各种回归算法示例
  8. ViewPager留两边 显示左右两边的视图
  9. 常量、变量、数据类型
  10. PE文件格式--------------导出表