`

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的用法文档

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

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

    xml + xslt => html => pdf

    NULL 博文链接:https://ucstudio.iteye.com/blog/2026260

    XSLT+CSS+JQuery+WebService实现网站

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

    xsl导数据到oracle

    可以通过这个工具,把Execl表格的数据导入数据库

    XSLT基础教程

    NULL 博文链接:https://xx371557412.iteye.com/blog/1320913

    无废话XML.pdf

    XML技术资料,全面介绍XML,XHTML,XSTL,XPATH

    Ajax and DWR资料

    包括Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest

    关于ajax的论文

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

    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对象进行异步数据读取,使用...

    XML高级编程学习笔记

    此文档是我当初学习《XML高级编程》 英文《PROFESSIONAL XML》 一书是做的一个电子...文中详细的介绍了 xml 语法,编辑器,css,xsl,xml模式、xstl、xpath、xquery、soap、java,c#,数据库厂商对其的支持,ws*的规范等。

    XPATH学习,xpath入门的好东西啊

    自己总结的,没有涉及到函数。 因为目前只是用xpath进行xml的解析和提取。 没有涉及到过多的,xsl和xstl。

    AJAX开发简略(带源码)

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

    Dom4j学习教程+API

    Dom4j 是一个易用的开源的库,用于XML、XPATH和XSTL,它应用Java平台,采用Java集合框架并完全支持DOM、SAX和JAXP.

    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

    利用ajax实现简单的注册验证局部刷新实例

    1,ajax(asynchronouse javascript and xml)异步的 javascrip 和xml 2,(包含了7种技术:javascript xml xstl dom xhtml css xmlhttpRequest) 3,是一种与服务器语言无关的技术,可以用在(php/jsp/asp.net) 4,ajax...

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

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

Global site tag (gtag.js) - Google Analytics