`

XSTL接触

    博客分类:
  • XML
阅读更多
XSTL接触
07月 11th, 2006 by 城市刀客



XSL是EXtensible Stylesheet Language的缩写,意思是可以扩展的样式单语言。我们知道如何用CSS格式化HTML/XHTML,虽然利用CSS(CSS = HTML Style Sheets)也可以格式化XML(针对浏览器而言)。但CSS的功能有限,而且CSS不符合XML规范,因此,我们需要使用XSL(XSL = XML Style Sheets)来更好地为XML文件定义样式。

当然,XSL不仅仅是一种样式语言。它包含下面三个部分:

XSLT:(XSL Transformations)XML格式转化
XPath: 通过路径表达式匹配节点
XSL-FO:(XSL Formatted Object)XSL格式对象
严格来说,很多人所说的XSL其实是指XSLT。要掌握XSL,应该先理解XPath和XSL-FO。

Step 1:理解XPath。

XPath是一个W3C标准。它是通过路径表达式来选择或调整XML文档的节点。它的路径表达式跟计算机的文件系统的路径非常相似。XPath包括100多个内建的functions,用来处理字符串,数字,布尔值,时间/日期的比较,节点顺序以及节点内容。

1、XPath节点:

在XPath里面,假定了一个XML文件包括下列7类节点:

处理指令 (processing-instruction)
根节点(document | root node)
元素 (element)
文本 (text)
属性 (attribute)
命名空间 (namespace)
注释 (comment)  
举个简单的例子:students.xml

<?xml version="1.0" encoding="gb2312"?>
<students>
 <student>
  <name lang="CN">风云</name>
  <age>25</age>
 </student>
 <student>
  <name lang="EN">Rose</name>
  <age>20</age>
 </student>
</students>
其中,<?xml version="1.0" encoding="gb2312"?>为处理指令,students为根节点,<age>25</age>为元素节点, lang="CN"为属性节点。节点与节点之间存在父子,兄弟,祖先/后代等关系,这取决于节点处在XML文件结构树中的位置。

2、XPath语法:

1)普通选择:
前面已经说过,XPath是通过路径表达式来选择节点的,常用的选择节点的语法如下表:

表达式 说明
节点名称 选择该节点的所有子节点
/  选择根节点
//  选择当前匹配条件的节点 
.  选择当前节点 
..  选择当前节点的父节点
@  选择属性

在上面的例子(students.xml)中,相应的选择表达式及其含义如下:

表达式 说明
students 选择students的所有子节点
/students 选择根节点students。注意:如果表达式是以“/”开始的,那么表示它使用的是绝对路径。
students/student 选择students的所有子节点student
//student 选择所有的student节点,不管它是否为students的直接子节点。
students//student 选择所有students的后代节点student,不管它是否为students的直接子节点。
//@lang  选择所有属性名为“lang”的属性值。

2)特定选择:特定选择通常用来查找特定节点或者包含特定内容的节点。特定选择在普通选择的基础上用方括号描述一些条件来实现特殊的节点查找。看例子:

路径表达式 结果说明
/students/student[1]  选择students的第一个子节点student
/students/student[last()]  选择students的最后一个子节点student
/students/student[position()<3]  选择students的前两个子节点student
//name[@lang]  选择具有lang属性的name元素
//name[@lang='EN']  选择具有lang属性并且值为“EN”的name元素
/students/student[age>20]  选择students的子元素student,要求student的age元素的值大于20
/students/student[age>20]/name  选择students的子元素student下的age元素大于20的兄弟节点:name

3)通配符选择:通配符选择一般用于选择未知的节点。常用的有如下三种:

通配符 说明
*  匹配所有元素节点
@*  匹配所有属性节点
node()  匹配所有类型的节点

4)预定义关系选择:这些预定义关系都是相对当前节点而言的。

预定义关系 结果描述
ancestor  选择当前节点的祖先(包括父节点,祖父节点等等)
ancestor-or-self  选择当前节点的祖先(包括父节点,祖父节点等等)和当前节点本身
attribute  选择当前节点的所有属性
child  选择当前节点所有的子节点
descendant  选择当前节点的后代(包括儿子节点,孙子节点等等)
descendant-or-self  选择当前节点的后代(包括儿子节点,孙子节点等等)和当前节点本身
following  选择当前节点结束标记之后的所有内容
following-sibling  选择当前节点结束标记之后的所有兄弟节点
namespace  选择当前节点的所有命名空间
parent  选择当前节点的父节点
preceding  选择当前节点开始标记之前的所有内容
preceding-sibling  选择当前节点开始标记之前的所有兄弟节点
self  选择当前节点

语法:预定义关系::节点选择[选择条件]
例子:child::student     //选择当前节点的所有子节点student。

5)XPath操作符:跟一般编程语言的操作符大体相同,注意不同的地方。见下表

操作符 说明 示例
|  和(这容易与编程语言的“或”搞乱) //book | //cd 
+  加 6 + 4 
-  减 6 – 4 
*  乘 6 * 4
div  除 8 div 4 
=  等于 age=20 
!=  不等于 age!=20 
<  小于 age<20 
<=  小于或等于 age<=20 
>  大于 age>20 
>=  大于或等于 age>=20 
or  或 age=20 or age=30
and  并且 age>20 and age<30
mod  模(除法取余) 5 mod 2 

未完,代续…..

Step 2:理解XSL-FO

XSL-FO是描述如何将XML数据格式化输出到显示器,纸张或其他媒体的符合XML规范的标记语言。XSL-FO文件的后缀是.fo或者.fob,但我们为了便于XML编辑器读取,通常以.xml为后缀。

1、XSL-FO文件的结构如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4">
            <!– Page template goes here –>
        </fo:simple-page-master>
    </fo:layout-master-set>

    <fo:page-sequence master-reference="A4">
        <!– Page content goes here –>
    </fo:page-sequence>

</fo:root>

2、XSL-FO利用矩形区块输出。

XSL格式化模型定义了许多区块用来在显示内容。所有的内容(图片、文字等)都将被格式化到这些区块范围中输出。我们经常使用的有以下几种区块(从大到小):

Pages(页)
Regions(区域):包括region-body (the body of the page) ,region-before (the header of the page) ,region-after (the footer of the page) ,region-start (the left sidebar) ,region-end (the right sidebar)
Block areas(区域内区块)
Line areas(行)
Inline areas(行内)  
Page & Page margin & Region示意图:



Step 3 :掌握XSLT

XSLT是一种将XML文档转化为HTML/XHTML或其他XML文档的语言。

1、声明XSLT的指令:<xsl:stylesheet> or <xsl:transform>.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

//or
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

为了能够访问XSLT的元素、属性和其他内容,我们必须在顶级元素声明XSLT的命名空间。xmlns:xsl=http://www.w3.org/1999/XSL/Transform表明我们使用的是W3C官方的XSLT命名空间,使用这个命名空间的同时,必须指定属性version="1.0"。

2、在XML中应用XSLT的指令:<?xml-stylesheet type="text/xsl" href="the url of the .xsl file"?>

3、模板元素:<xsl:template>

通过添加match属性,在match属性里使用XPath路径表达式选择匹配的节点。例如:<xsl:template match="/">
将匹配整个XML文档。

4、文本提取元素:<xsl:value-of>

通过添加select属性,在select属性里使用XPath路径表达式选择匹配的节点。例如:<xsl:value-of select="students/student/age"/>将提取students的子元素student下的age标签包含的文本。

5、循环控制元素:<xsl:for-each>

通过添加select属性,在select属性里使用XPath路径表达式选择匹配的节点。例如:
<xsl:for-each select="students/student">
    <span id="sname"><xsl:value-of select="name"/></span>
    <span id="sage"><xsl:value-of select="age"/></span>
</xsl:for-each>
这将循环提取students的子节点下的name/age包含的文本。

6、排序控制元素:<xsl:sort>

要对输出的结果排序,只需要在循环控制元素里面简单地添加一个<xsl:sort>元素即可。例如:
<xsl:for-each select="students/student">
    <xsl:sort select="age"/>
    <span id="sname"><xsl:value-of select="name"/></span>
    <span id="sage"><xsl:value-of select="age"/></span>
</xsl:for-each>
意即在输出的时候对age数据域内的内容排序(默认从小到大)。

7、条件测试元素:<xsl:if>

通过添加test属性,在test属性里使用条件表达式选择匹配的节点。例如:
<xsl:for-each select="students/student">
    <xsl:if test="age &gt; 24">
        <span id="sname"><xsl:value-of select="name"/></span>
        <span id="sage"><xsl:value-of select="age"/></span>
    </xsl:if>
</xsl:for-each>
意即只输出age>24的节点内容。

8、判断选择元素:<xsl:shoose>

通过联合<xsl:when>和<xsl:otherwise>,达到编程语言if…else….的判断效果。语法如下:
<xsl:choose>
  <xsl:when test="expression">
    … some output …
  </xsl:when>
  <xsl:otherwise>
    … some output ….
  </xsl:otherwise>
</xsl:choose> 

例子:
<xsl:for-each select="students/student">
 <span id="sname"><xsl:value-of select="name"/></span>
 <xsl:choose>
   <xsl:when test="age &gt; 20">
  <span id="sage" style="color:#F00"><xsl:value-of select="age"/></span>
   </xsl:when>
   <xsl:otherwise>
  <span id="sage"><xsl:value-of select="age"/></span>
   </xsl:otherwise>
 </xsl:choose>
</xsl:for-each>

9、应用模板元素:<xsl:apply-templates>

这个元素给当前的元素或当前元素的子元素应用了一个模板。当然,该模版应该存在。

分享到:
评论

相关推荐

    XSLT指南

    **XSLT(可扩展样式表转换语言)**是一种强大的XML处理工具,它允许开发者将XML文档转换成其他格式,如HTML、PDF或简单的文本。XSLT是基于XPath的,XPath是用于在XML文档中查找信息的语言。本指南旨在深入解析XSLT的...

    jsp/jsf和XML/XSLT技术整合的精华

    jsp/jsf和XML/XSLT技术整合的精华 随着JSTL 1.0,JSP™ 2.0和JSF 1.0技术 的介入,JSP™技术已经成为一个成熟的主 流表现层技术,但是它还没有提供足够的灵 活性和模块化 。 服务器端Java™技术的发展 ...

    xml + xslt => html => pdf

    标题 "xml + xslt =&gt; html =&gt; pdf" 涉及到的是一个常见的数据转换流程,主要涉及XML(可扩展标记语言)、XSLT(XSL转换)和HTML、PDF(便携式文档格式)等技术。以下是这些技术的详细解释以及它们如何协同工作: ...

    XSLT+CSS+JQuery+WebService实现网站

    XSLT+CSS+JQuery+WebService实现网站 分离到底!用XML+XSLT+CSS+JQuery+WebService组建Asp.Net网站,数据库采用的是Access(在App_Data下) 使用这种方案建站的人依然寥寥无几,大家还都在抱着Web标准化不撒手,其实...

    xsl导数据到oracle

    标题“xsl导数据到oracle”涉及到的是将Excel(XSL是XML Spreadsheet Language,通常用于表示Excel文件)中的数据转换并导入到Oracle数据库的过程。这是一个常见的数据迁移或数据整合任务,对于数据分析、报表生成和...

    XSLT基础教程

    **XSLT基础教程** XSLT,全称为Extensible Stylesheet Language Transformations,是一种用于转换XML(Extensible Markup Language)文档的语言。... 在学习XSLT时,有几个核心概念需要理解: 1. **模板(Templates...

    Ajax.Hacks

    其实,AJAX(Asynchronous JavaScript and XML)是多种技术的综合,它使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用XMLHttpRequest对象进行异步数据读取,使用...

    web2.0 ajax

    其实,AJAX(Asynchronous JavaScript and XML)是多种技术的综合,它使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用XMLHttpRequest对象进行异步数据读取,使用...

    AJAX开发简略(带源码)

    AJAX讲解和范例代码 AJAX(Asynchronous JavaScript and XML)是多种技术的综合,包括Javascript,XHTML和CSS,DOM,XML和XSTL,XMLHttpRequest.

    AJAX开发简略

    AJAX(Asynchronous JavaScript and XML)其实是多种技术的综合,包括 Javascript、 &lt;br/&gt;XHTML 和 CSS、DOM、XML 和 XSTL、XMLHttpRequest

    ibatis2mybatis-master

    可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...

    纯js封装的ajax功能函数与用法示例

    本文实例讲述了纯js封装的ajax功能函数与用法。...是7种技术的综合,它包含了七个技术(javascript xml xstl xhtml dom xmlhttprequest , css), ajax 是一个粘合剂。 直接上程序: js调用部分: [removed]&lt;/script

    Pdf--to--XML:PDF TO XML 转换器(Web 应用程序)

    CSS 引导框架STS(弹簧工具套件)描述: 该Web应用程序旨在解析pdf文件(Employess Payslip)并使用pdfbox api从pdf文件中提取详细信息,然后转换为json,然后转换为xml,然后使用xstl转换为xml。 用户可以在 UI 中...

    AJAX在数据广播中的应用及实现.pdf

    AJAX(Asynchronous JavaScript and XML)是 Web2.0 中的一种核心技术,它实际上是多种技术的综合,包括 JavaScript、XML、XHTML、CSS、DOM、XSTL 等。由于 AJAX 的异步交互特性,使其在数据广播中有很大的应用空间...

    AJAX框架在web服务中的应用.pdf

    AJAX模型和Web服务的应用中,AJAX技术主要包括xHTML和CSS标准化呈现、使用DOM实现动态显示和交互、使用XML和XSTL进行数据交换和处理、使用XMLHttpRequest对象进行异步数据操作、使用JavaScript绑定和处理所有数据。...

    javaxml:该项目说明了Java中XML的操作

    的javaxml 该项目说明了Java中XML的操作。 开始 要运行该项目,您将需要安装以下程序: 发展 要开始开发,必须在您选择的目录中克隆GitHub项目: cd " diretorio de sua ...XSTL(javax.xml) 链接 执照 没有。

    基于SVG与Ajax技术的WebGIS研究与设计.pdf

    Ajax是多种技术的综合,在XHTML和CSS基础上,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用XMLHttpRequest对象进行异步数据读取,使用JavaScript绑定和处理所有数据。Ajax提供了与服务器异步...

    Windchill9.0开发技术介绍

    Ajax(Asynchronous JavaScript and XML)是一种基于 JavaScript、XHTML、CSS、DOM、XML 和 XSTL 的技术。它可以将服务器的负担减少到最少,让用户的体验更加流畅。 使用 Ajax 可以带来很多好处,包括减轻服务器的...

    国软XML实验作业第二次作业

    XML(eXtensible Markup Language)是一种用于标记数据的语言,它的设计目的是传输和存储数据,而不是显示数据。在本实验中,我们重点关注XML的基础知识、XSLT(Extensible Stylesheet Language Transformations)...

Global site tag (gtag.js) - Google Analytics