第八章XSL转换综述
使用XSL转换XML文档
2.附加指定属性条件
例如: <xsl:template match="student[@class]">
使用XSL转换XML文档
1
XSL概述
2
XSL模板
3
XSL节点选择
4
XSL控制指令
5
XSL应用实例
1 XSL概述
1.1 XSL基本概念
XSL的全称是eXtensible Stylesheet Language, 即可扩展样式语言,是目前用来设计XML文档 显示样式的主要技术之一。 XSL主要由两部分组成,即数据转换语言XSLT 和数据格式化语言XSL-FO。目前主要使用数据 转换语言XSLT,可以根据需要把XML文档转换 成任何一种基于文本格式的文档。 XSL样式表文档的内容完全符合XML的语法规 定,因而可以将其看成是一种特殊的XML文档。
2.XSL文档的创建
XSL文档以 .xsl为其文件扩展名,与XML 文档一样也是一种文本文件,可用任何一 种文本编辑软件进行创建和修改。
3.XSL文档的引用
在XML文档中引用XSL样式表的方法是在 序言部分添加如下形式的指令: <?xml-stylesheet type="text/xsl" href="URI" ?> URI表示XSL文件名
1.3 XSL文档的创建与应用
1.XSL文档的组成
XSL文档基本组成形式: <?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www/w3/org/tr/wd-xsl">
XML实用技术教程 第17讲(XSLT转换)
2006。 2006。3
计算机与电子系— 计算机与电子系—计算机技术教研室
XSLT转换机理 XSLT转换机理
XSLT将模式与模板相结合来实现转换 XSLT将模式与模板相结合来实现转换
样式表转换
XML FO
样式单树 (模板 模板) 模板 源文档 源树 指令执行
XML
XSL引擎 引擎
FO
结果树
XML
Non XML
2006。 2006。3
计算机与电子系— 计算机与电子系—计算机技术教研室
什么是模式
模式就是所规定节点处理的条件集合 满足条件的节点匹配该模式,不满足则不匹配 最普通的模式规定匹配元素类型的名称。
模式 doc * chapter|section section/title text() Node() 含义 配任何的doc元素 配任何的doc元素 匹配任何元素 匹配任何的chapter元素和section元素 匹配任何的chapter元素和section元素 匹配上一代元素为section的title元素 匹配上一代元素为section的title元素 匹配任何文本节点 匹配任何非属性节点和非根节点
2006。 2006。3 计算机与电子系— 计算机与电子系—计算机技术教研室
para、note元素所匹配的模板 para、note元素所匹配的模板
<xsl:template match="para"> <p><xsl:apply<p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="note"> <p class="note"><b>NOTE:</b><xsl:applyclass="note"><b>NOTE:</b><xsl:applytemplates/></p> </xsl:template> <xsl:template match="emph"> <em><xsl:apply<em><xsl:apply-templates/></em> </xsl:template> </xsl:stylesheet>
xsl入门.
二.XSL的转换
1.将XML转换成HTML XSL是如何将XML文档转换成HTML文件的呢?我们来பைடு நூலகம்一 个例子,下面是XML文档的一部分: <?xml version="1.0" encoding="ISO8859-1" ?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </CATALOG>
当XML文档被转换成HTML文件,索引应该 同时建立。简单的办法就是给你的for-each 元素增加一个order-by属性,就象这样: <xsl:for-each select="CATALOG/CD" order-by="+ ARTIST"> order-by属性带有一个"+"或者"-" 的符 号,用来定义索引的方式,是升序还是降序 排列。符号后面的名字就是要索引的关键字。 例如(cd_catalog_sort.xsl):
如果为XML文档加上XSL样式表,看下面代码第2行,你的浏 览器就可以精确的将XML 文档转换为HTML文件。 <?xml version="1.0" encoding="ISO8859-1" ?> <?xml-stylesheet type="text/xsl" href="cd_catalog.xsl"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </CATALOG>
XSL转换原理
XML文档中的处理指令
注释节点
XML文档中的注释
现在创建一个XML文档,用来演示XSL构造的文档树,打开记事本,输入下列代码:
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" here="Example1.xsl"?>
XSL
XSL工作原理就是把XML文档作为一个存储数据的树来看待,称它为源树。XML文档的根元素和子元素可以看作是树节点。XSL就是把这些存放数据根据我们自己的需要从XML树中提去出来,组成一个新的树,也就是结果树。结果树和源树是独立存在的,对结果树中的数据操作不会影响到源树中的数据,XSL正是通过这种方式实现了数据和表示分离的目的。而XSL提取数据的工具就是XSL处理器,XSL处理器首先根据要找的节点在源树中寻找,其寻找方式就是上面描述的情形。数据提取到之后,就到XSL文档中,找到与这个节点匹配的样式定义。按定义好的样式显示数据,即形成了一个新的文档树。
XSL处理器在对XML文档进行转换时,根据指定的样式表文档来输出结果文档。XSL对源文档、结果文档和样式表文档使用同样的数据模型来操作,也就是采用同样的树状结构。不过要注意的是,处理指令和注释在样式表中被忽略:样式表被看作是既没有处理指令节点,有没有注释节点的样式表树。XSL处理器在构造结果树时,可以对源文档树进行修改、过滤和添加其他内容,且结果树的结构和源文档树的结构完全不同。
<俱乐部>
<会员>
<姓名>韩军</姓名>
<年龄>30 </年龄>
XSL转换分析
2018/10/12 2
CSS与XSL的比较
W3C已经给出了两种样式单语言的推荐标准: 层叠样式单CSS 可扩展样式单语言XSL CSS既可用于HTML,也可用于XML。但XSL是专门针对XML提出 的,它不能处理HTML文档。 CSS是一种静态的样式描述格式,XSL 是一种动态的样式描述格 式,可以动态地创建输出样式。 CSS不遵从XML的语法规范;而XSL遵从XML 的语法,本身也是 一个XML文档。 XSL中90%的样式规定在CSS中都有定义,但仍然有一些效果是 CSS无法描述的,必须使用XSL。这些功能包括文本的置换、根据 文本内容决定显示方式、文档内容排序等,都是XSL所独有的。 XSL是一种转换的思想,它最终将XML文档转换为另一种可用于输 出的文档;而CSS则没有任何转换动作,在整个过程中没有任何新 码产生。 CSS不支持中文,而XSL支持中文。
元素节点 属性节点 文本节点 名称空间节点 处理指令节点 注释节点 文档(根)节点
2018/10/12
13
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> (文档节点或根节点)
<book>
<title lang="en" (属性节点) >Harry Potter</title> <author>J K. Rowling</author> (元素节点) <year>2005(文本节点)</year> <price>29.99</price> </book>
《XML基础及开发实践》第八章
被转换的XML文件
<?xml version="1.0" encoding="UTF-8"?> <!--通过处理指令引入XSLT文档--> <?xml-stylesheet type="text/xsl" href="simple.xslt"?> <person> <name>田诗琪</name> <birthdate>2011-04-11</birthdate> <sex>女</sex> <high>83cm</high> </person>
第一个XSLT
<xsl:template match="/"> <html> <head><title>个人信息介绍</title></head> <body><h1>姓名:<xsl:value-of select="person/name"/></h1> <ul> <li>生日:<xsl:value-of select="person/birthdate"/></li> <li>性别:<xsl:value-of select="person/sex"/></li> <li>身高:<xsl:value-of select="person/high"/></li> </ul> </body> </html> </xsl:template> </xsl:stylesheet>
第8章 XSL转换6
-XSL转换
-XML应用-
8.2.3 XPath简介
一种专门用来在XML文档中查找信息的语言 XPath表达式返回4种类型值:
节点集合(node-set):集合中序号从1开始 布尔值(Boolean) 数字 字符串
基本上XSLT的最常规用法是返回节点集合或者 字符串 <xsl:template match=“匹配表达式”>
XML应用 应用
授课教师 侯霞 软工0701-02、B信计 信计0701-03 授课班级 B软工 软工 、 信计
1
-XML应用-
教学目标
理解XSL的一些基本概念和结构 掌握Xpath的表示方法和含义 掌握XSLT转换语言的基础知识,熟悉 XSLT所使用的元素、模板、函数等 掌握XSLT的应用方法 通过具体实例的学习,学会运用XSLT编 写转换模板
19
-XSL转换
Operator | + * div = != < <= > >= or and -XSL转换 mod
Description Computes two node-sets Addition Subtraction Multiplication Division Equal Not equal Less than Less than or equal to Greater than Greater than or equal to or and Modulus
4
-XSL转换
-XML应用-
8.2.2 XSLT简介
XSLT提供一套规则,用于将一组元素 描述的XML数据转换为另一组元素描述 的文档,或者是将该数据转换为一种自 定义的文本格式
5
-XSL转换
XSLT转换XML小结
XSLT转换XML小结产品几年前使用ASP,后来升级到.Net 1.1,再升级到2.0,一直都有用XSLT转换XML 生成网页的方式,稍微整理下。
XML file:<?xml version="1.0" encoding="utf-8" ?><ric><catalog><book price="75"><author>Kalen Delaney</author><nam e>Inside SQL Server 2000</name></book><book price="200"><author>Ken Henderson</author><nam e>The Guru's Guide to SQL Server Architecture</name></book></catalog></ric>XSLT file:<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0"xm lns:xsl="/1999/XSL/Transform"><xsl:output m ethod="ht ml" encoding="utf-8"/><xsl:template m atch="/"><ht ml><body><table cellpadding="0" cellspacing="0" border="1" style="border-collapse:co llapse;font-size:14px;"><tr><th>Book Name</th><th>Author</th><th>Price</th></tr><xsl:for-each select="//ric/catalog/book"><tr><td><xsl:value-of select="name"></xsl:value-of></td><td><xsl:value-of select="author"></xsl:value-of></td><td><xsl:value-of select="@price"/></td></tr></xsl:for-each></table></body></ht ml></xsl:tem plate></xsl:stylesheet>注意xsl:output,指定转换后输出结果的格式,可以是xml、ht m l、text,如果不指定,默认值为xml。
XSLT介绍
XSLT介绍XSLT是一种将XML文档转换为其他文本文档的语言,是建立在XML和XPath之上的国际标准,内容比较多,功能强大。
对于编程人员来说,XSLT可以看作以前序遍历的方式专门处理XML树状结构的标记语言。
以前编程根据XML文档输出纯文本数据时需要写代码以前序遍历方式的方式遍历XML文档对象组成的树状结构,对于每一个特定名称或特定层次的XML节点而输出不同的内容,这个过程比较复杂,代码量大,需用进行很多的状态判断。
而XSLT则使用一种简洁明了的标记语言实现了相同的逻辑。
因此XSLT从程序逻辑的角度看类似支持递归的编程语言,而且是专门处理XML文档的。
XSLT转换过程会涉及到三个文本文档,一个是要处理的原始XML文档,第二个就是XSLT样式表文档,该文档包含了XSLT代码,XSLT代码本身就是XML格式,但使用了XML的名称空间。
第三个就是XSLT处理输出的文本文档,注意,此处输出的是纯文本文档,这个文档具体是什么格式完全靠XSLT代码来决定,可以是另外一个XML文档,HTML文档,SQL语句字符串或者其他任意格式的字符串数据等等,XSLT转换只能输出纯文本文档,此外就没有限制输出文档的具体格式。
数据XML文档是一个很简单的XML文档,此处不加说明了。
重点说说XSLT样式表文档,XSLT 样式表文档本身是一个XML文档。
它采用XML的树状结构来描述递归处理过程,也比较好理解。
在样式表文档中,根元素为xsl:stylesheet,里面定义了一个名为xsl的名称空间,这个根节点及其属性值都是固定的。
xsl:output元素是可选的,它的method属性用于指定输出文档的格式,可以设置为xml,html或text 值。
此处使用xml输出样式,说明输出的文档是XML格式的,XSLT转换会尽量生成XML文档,但不作保证,因此仍然有可能生成不合格的XML文档。
xsl:template用于定义一个XSLT模板,模板类似编程语言中的函数,可实现XSLT代码的重用。
xsl
2.XSL文档的创建
• XSL文档以 .xsl为其文件扩展名,与XML文档 一样也是一种文本文件,可用任何一种文本编 辑软件进行创建和修改。
3.XSL文档的引用
• 在XML文档中引用XSL样式表的方法是在序言 部分添加如下形式的指令: • <?xml-stylesheet type="text/xsl" href="URL" ?>
节点匹lt;A id="a1"> <B id="b1"> <C id="c1"> <B name="b"/> <D id="d1"/> <E id="e1"/> <E id="e2"/> </C> </B> <B id="b2"/> <C id="c2"> <B/> <D id="d2"/> <F/> </C> <E/> </A>
XSL节点选择
• 使用元素名选择节点 • 可以在模板中直接指定XML文档的某个元素名 来选择相匹配的节点。 • 例如: • <xsl:template match="roster"> <xsl:apply-templates select="roster"/> <xsl:value-of select="name"/>
XSL样式单 --节点匹配路径XPath
XSL教程
类似于定位某个文件系统,在其中正斜杠(/)可选择子目录。
4.<xsl:for-each> 元素
XSL <xsl:for-each> 元素可用于选取指定的节点集中的每个 XML 元素:
5.<xsl:if> 元素
如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 <xsl:if> 元素。l例如:
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 10">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:call-template name="child"> <!-- 调用子模板(相当于函数)child -->
<xsl:with-param name="testParam" select="catalog/cd/title" /> <!-- 向函数传递实参 -->
</xsl:call-template>
通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。
DSO和XSL切换样式
DSO和XSL切换样式XML文件可以用来存储数据,样式表单文件XSL或CSS可以用来指定数据显示样式,两者结合起来可以指定数据的显示样式。
但在显示时,只有一种样式被显示,因为一个XML文件对应一个样式表单文件。
利用DSO数据源对象,我们可以为XML文件指定多个样式表单文件,样我们选择自己喜欢的方式来查看数据。
例如每个在客户端浏览信息的人,可以选择自己喜欢的颜色,图片来显示数据,并且不需要把自己的爱好信息发给服务器端,直接在客户端完成,减轻了服务器端的工作量,这样不是更好么。
要实现这样的功能,可以把DSO数据源对象和XSL样式表单结合起来。
现在创建一个案例,样式使用DSO对XML文档的样式进行切换。
首先创建X将上述代码保存,名称为Example10.xml。
现在创建样式表单文件,打开记事本,输入下列代码:将上述代码保存,名称为Example10.xsl。
创建第二个样式表单文件,打开记事记事本,输入下列代码:</xsl:stylesheet>将上述代码保存,名称为Example10_2.xml。
创建引入XML数据将上述代码保存,名称为Example10.html。
直接双击该文件,会显示如图8-18所示窗口:图8-18 样式1显示在图中单击【样式2】按钮,会显示如图8-19所示窗口:图8-19 样式2显示单击【样式3】按钮,会显示如图8-20所示窗口:图8-20 样式3显示在该程序中,当单击不同的样式按钮时,XML文件数据显示不同的样式。
该程序中,XML文件提供数据,XSL提供显示样式代码,HTML页面提供控制转换代码。
该文件中,首先使用“<xml id="dso" src="Example10.xml"></xml>”语句把X ML文件作为数据岛引入到该文件中使用,该XML文件的对象名为“dso”,即数据源对象dso。
“<xml id="Stylesheet1" src="Example10.xsl"></xml>”把样式表单文件以数据岛的形式引入过来,XSL样式单文件本身就是一个良好的XML文件,对象名为“Stylesheet1”。
XSLT总结
1.xslt概念最早设计XSLT的用意是帮助XML文档(document)转换为其它文档。
更全面的定义应该是:XSLT是一种用来转换XML文档结构的语言。
2.为什么需要xslt。
因为XML满足了两个基本的需求:(1).将数据和表达形式分离。
就象天气预报的信息可以显示在不同的设备上,电视,手机或者其它。
(2).在不同的应用之间传输数据。
电子商务数据交换的与日俱增使得这种需求越来越紧迫。
XSLT就是我们用来实现这种转换功能的语言,过滤有用的信息。
3.xslt和css比较。
CSS同样可以格式化XML文档,那么有了CSS为什么还需要XSLT呢?因为CSS虽然能够很好的控制输出的样式,比如色彩,字体,大小等,但是它有严重的局限性,就是:(1) CSS不能重新排序文档中的元素;(2) CSS不能判断和控制哪个元素被显示,哪个不被显示;(3) CSS不能统计计算元素中的数据;换句话说,CSS只适合用于输出比较固定的最终文档。
CSS的优点是简洁,消耗系统资源少;而XSLT虽然功能强大,但因为要重新索引XML结构树,所以消耗内存比较多。
因此,我们常常将它们结合起来使用,比如在服务器端用XSLT处理文档,在客户端用CSS 来控制显示。
可以减少响应时间。
4.XSLT的元素语法① xsl:template的语法是:<xsl:templatematch = patternname = qnamepriority = numbermode = qname><!-- 执行内容--></xsl:template>xsl:template的作用是定义一个新模板。
属性中name,priority,和mode用来区别匹配同一节点的不同模板。
它们不是常用的属性。
match属性则控制模板的匹配模式(pattern),匹配模式是用来定位XML源文档中哪一个节点被模板处理。
一个模板匹配一个节点。
我们用一个例子来帮助理解:假设我们要处理一个包含章节和段落文档。
xsl转换
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="/1999/XSL/Transform"><xsl:template match="/"><html><head><title>雇员信息表</title></head><body><style type="text/css"></style><xsl:apply-templates /></body></html></xsl:template><xsl:template match="Employees"><xsl:for-each select="Person"><xsl:if test="FirstName="Lara"">节点"DateOfBirth"包含的文本内容是 "<xsl:value-of select="DateOfBirth"/>"<br/> </xsl:if><xsl:if test="FirstName="Patrick"">节点"Person"包含的文本内容是 "<xsl:value-of select="."/>"<br/>节点"FirstName"包含的文本内容是 "<xsl:value-of select="FirstName"/>"<br/>节点"LastName"包含的文本内容是 "<xsl:value-of select="LastName"/>"<br/>节点"DateOfBirth"包含的文本内容是 "<xsl:value-of select="DateOfBirth"/>"<br/> </xsl:if><xsl:if test="FirstName="Angela"">节点"Person"包含的文本内容是 "<xsl:value-of select="."/>"<br/>节点"FirstName"包含的文本内容是 "<xsl:value-of select="FirstName"/>"<br/>节点"LastName"包含的文本内容是 "<xsl:value-of select="LastName"/>"<br/>节点"DateOfBirth”包含的文本内容是 "<xsl:value-of select="DateOfBirth"/>"<br/> </xsl:if></xsl:for-each></xsl:template></xsl:stylesheet>XML文档:<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="employees_info.xsl"?> <Employees><Person><FirstName>Lara</FirstName><LastName>Farmer</LastName><DateOfBirth>1944-12-12</DateOfBirth></Person><Person><FirstName>Patrick</FirstName><LastName>Stepfoot</LastName><DateOfBirth>1955-11-11</DateOfBirth></Person><Person><FirstName>Angela</FirstName><LastName>Paris</LastName><DateOfBirth>1980-10-10</DateOfBirth></Person></Employees><?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="/1999/XSL/Transform"><xsl:template match="/"><html><head><title>人物特征表</title></head><body><h5>这里记录的年龄有些不正常,请检查原始数据.</h5><xsl:apply-templates /></body></html></xsl:template><xsl:template match="Character"><xsl:choose><xsl:when test="@age>110"><xsl:value-of select="."/>太老了,老的难以想象,请检查这个人物的年龄,<xsl:value-of select="@age"/>,是否正确?<br/></xsl:when></xsl:choose></xsl:template></xsl:stylesheet>Character XML文档:<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="character_info.xsl"?><Characters><Character age="99">Julius Caesar(朱利叶斯.恺撒)</Character><Character age="23">Anne Boleyn(圣安妮.博林)</Character><Character age="41">George Washington(乔治.华盛顿)</Character><Character age="45">Martin Luther(马丁.路德)</Character><Character age="800">Methuselah(玛士撒拉)</Character><Character age="119">Moses(摩西)</Character><Character age="50">Asterix the Gaul(阿斯特里克斯.高卢)</Character> </Characters>。
xsl中文
Docbook1.简介在过去的二十年中,出版的性质已经改变了非常多,现在任何人都可以是出版者。
现在你可以在你的网站上面放置一些网页,然后你将获得世界范围的观众。
或者你也可以使用桌面出版软件来产生具有精美排版的材料,以供世界各地的用户按照需要打印或者下载到打印机内。
使用DocBook你可以从一份材料中产生两种方式的产品。
DocBook是出版技术的一系列标准和工具的集合。
DocBook最初是被一些软件公司的联合财团建立来作为计算机文档的标准。
但是DocBook的基本属性“book”可以被其他类型的内容使用,所以它现在已经适用于多种用途。
DocBook的核心标准是被OASIS中的DocBook技术委员会所维持的DTD (文档类型定义)。
DTD定义了一个作者可以使用的内容元素的词汇表和它们之间的关系。
举个例子:一个book元素可以包含一个title元素,一些描述段落的para元素和一些chapter元素。
使用DTD和XML语法,作者们使用像<chapter>这样被尖括号括起来的标签来标记他们的文本内容。
这个标记与HTML有些相似,但是有更多的标签和更严谨的规则。
被这种标准方法标记的文本可以被一些软件工具所处理。
DocBook的一个重要优点就是它的工具可以来自很多方面而不只是从单一供应商的专有文件格式。
你可以混合和匹配不同的组件来编辑,排版,版本控制盒进行HTML 转换。
你可以组装一个非常适合你的需求的定制系统,其中的许多组件都是免费的。
DocBook的另一个主要优点是有一个可以使用的样式集合。
由Norman Walsh 使用XSL可扩展样式语言编写的样式,可以让任何人将他们的DocBook内容以打印版本和HTML版本进行发表。
现在样式表作为一个SourceForge上的开源项目进行开发和维护。
一个活跃的社区用户和贡献者保持着样式表的开发和问题的回答。
作为一个发行系统,DocBook非常适合下面的这些情况:•大量的内容。
XSL概念与应用
<fo:layout-master-set>
• <fo:layout-master-set> 元素指定页面定义。 • 在简单的文档中,一个布局可能就足够了,但复杂的文档通常有几个 页面定义。 • <fo:layout-master-set> • • • • <fo:simple-page-master master-name="main" margin-top="36pt“ margin-bottom="36pt" page-width="8.5in" page-height="11in" margin-left="72pt" margin-right="72pt"> <fo:region-body margin-bottom="50pt" margin-top="50pt"/>
• <fo:root> • <fo:layout-master-set> • <fo:simple-page-master> • <fo:region-body> • <fo:page-sequence> • <fo:flow> • <fo:block> 和 <fo:inline>
<fo:root>
XSL 格式化对象
XSL-FO 文档概述
• XSL-FO 文档定义了制作高质量可打印文档时非常重要的几件事情: – 有关页面的实际大小的信息(信纸和 A4 等等) – 有关页边距(顶部、左边、底部和右边)、页眉和页脚和页面其 它特性的信息 – 有关文本的字体、字体大小、颜色和其它特征的信息 – 要打印的实际文本,由描述段落、突出显示、表等类似物的元素 来标记
利用XSLT转换
利用XSLT转换XML我们已经在前面的章节中讲到了如何利用XSLT样式表,进行将数据库驱动的XML 转换到HTML页、具有特定词汇表的XML数据报、SQL脚本以及email等等。
作为程序开发员,如果用户希望在网络上将数据库的各种资料信息发挥出最大的价值,将发现XSLT就像是一把用户希望能够永远挂在自己腰带上的瑞士军刀。
简而言之,不论是在处理结构化信息的交换这一核心环节,还是在快速解决和重新策划信息这个极为重要的问题,对于充分理解如何开发利用XSLT的Oracle XML程序员来说,他们都将在解决上述问题时能够得心应手,胜人一筹。
XSLT 1.0是基于W3C标准的用于描述XML文档之间进行转换的语言,它同XPath 1.0标准紧密结合,二者共同致力于网络数据库的开发工作。
正如我们即将在本章内容中所讲到的,XPath用于指定需要进行转换的内容,而XSLT则提供了描述如何实现转换的相应的互补的语言。
XSLT样式表描述了将源XML文档转换为结果XML 文档的一系列的规则,通过XSLT处理器即可完成基于这些规则的转换过程。
在前面章节的简单样例中,我们已经看到了使用Oracle XSLT处理器的3种主要方法。
我们使用了oraxsl命令行工具、XSLT处理器的程序式API以及<?xml-stylesheet?>指令来连接样式表和页面。
在本章中,我们将探索XSLT语言的全部功能,来理解怎样在应用中最好地使用它。
302利用XSLT转换XML303 XSLT的处理机制XSLT样式表描述了一个变化过程,它作用于源XSLT文档的树状结构信息集,并产生一个节点树作为其输出结果。
考虑下面这个简单的XML文档:<!-- Emp.xml --><ROWSET><ROW num="1"><EMPNO>7893</EMPNO><ENAME>KING</ENAME></ROW><ROW num="2"><EMPNO>7788</EMPNO><ENAME>SCOTT</ENAME></ROW></ROWSET>通过运行这段文档将生成与之相应的节点树(见图7-1)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XSLT的一些可能的应用包括: 以查看为目的添加元素 从现在内容创建新的内容 从XML文档中提取信息 在不同的XML字典或模型之间进行转换 将XML文档转换为HTML
2018/12/24
8
XPath简介
一种专门用来在XML文档中查找信息的语言 。如果将XML文档看为 一个数据库,那么XPath就是SQL查询语句;如果把XML文档看为DOS 目录结构,那么XPath就是cd、dir等目录操作命令的集合。 XPath表达式返回4种类型值:节点集合(node-set)、布尔值 (Boolean)、数字和字符串。 基本上XSLT的最常规用法是返回节点集合或者字符串
item/itemName item//itemName book/* book[@isbn] book|title . ../itemName
匹配<item>节点下的<itemName>子节点 匹配<item>节点下,只要有<itemName>子节点 <book>节点下的所有子节点 <book>节点下有属性"isbn"的节点 与<book>或<title>匹配 取得当前节点 父节点下的itemName节点
2.访问数据 @符号指节点的标签属性 。假设chapter有type属性,按 “@type”的方式就可访问。如果为了可以从文档的任何地方 访问它,访问路径应该写成“book/chapter/@type” 方括号从一个集合中选出一个节点 ,很像是传统编程中的数 组。为了选出第二个chapter,可以用“book/chapter[2]”
2018/12/24
11
XPointer、XLink和XQuery XPointer是在XPath表达式基础上构建的,但在数据库模型和所支 持的函数中进行了扩展。支持对XML的内部结构部分的定位 。 XLink是描述在资源间进行链接的语言。它提供了类似于HTML的<a> 元素那样的链接功能。 XQuery提供了一种更为程序化、更清楚直接的方法。提供方便用户 进行查询XML文档输入,抓取相关数据和操作结果以创建不同格式 的输出形式的方法
XSL转换
2018/12/24
1
XSL转换
理解XSL的一些基本概念 明白XSL的结构 了解XPath在XSLT中所起的用途 掌握XSLT转换语言的基础知识 熟悉XSLT所使用的元素、模板、函数等 通过具体实例的学习,学会综合运用XSLT编写转换模板
2018/12/24
2
XSL概述ຫໍສະໝຸດ XSL的第二部分是XSL格式化对象。格式化对象提供了另一种方 式,来格式化显示XML文档,以及把样式应用到XML文档中。
2018/12/24
3
XSL概述
XSL的意义 将数据和表示形式分离 在不同的应用之间传输数据
XSLT和CSS的比较 CSS不能重新排序文档中的元素; CSS不能判断和控制哪个元素被显示,哪个不被显示;
可扩展的样式表语言(eXtensible Stylesheet Language,XSL) 它定义了如何转换和表示XML文档。比CSS功能要强大的多。XLS 能够象输出文件里添加新的元素或者移动元素,也能够重新排 列或者索引数据,它可以检测并决定哪些元素被显示,显示多 少等。它使用XPath匹配节点,把一个XML文档转换为另一个不 同的文档。得到的文档可以是XML、HTML、无格式文档或任何其 他基于文本的文档。
2018/12/24
6
XSLT简介 XSLT提供一套规则,用于将一组元素描述的XML数据转换为另一组 元素描述的文档,或者是将该数据转换为一种自定义的文本格式 最简单的XSLT应用情况首先涉及到两个文档:包含原始数据的XML 文档和用来转换该文档的XSLT转换文档。
2018/12/24
7
2018/12/24
9
1.节点导航 XPath导航的外观和行为完全与文件系统导航一摸一样。 斜线分隔父子节点:chapter/title.代表只在当前上下文的 chapter节点内直接检索title节点。 双斜线(//)是节点的通配路径 在路径的末尾加一个星号会返回所有当前路径下所有的节点
2018/12/24
12
XSLT转换语言
例:一个XML格式的问候文档
<?xml version="1.0" encoding="UTF-8"?> xsl:stylesheet version="2.0" xmlns:xsl="/1999/XSL/Transfo rm" xmlns:fo="/1999/XSL/Format" xmlns:xs="/2001/XMLSchema" xmlns:fn="/2005/xpathfunctions"> <xsl:template match="/"> <html> <head><title>Frist XSLT example</title></head> <body> <p> <xsl:value-of select="greeting"/> </p> </body> </html> </xsl:template> </xsl:stylesheet>
2018/12/24 10
表 XSL匹配中使用的特殊字符
特殊 符号 / // * [ ] | . .. 子节点操作符 循环下降。符号后余下部分可能与文档 中的任何节点相匹配 选择任何元素的通配符 可以在其内指定元素或属性,也可加上 额外的测试条件 与多个节点匹配 当前节点 父节点 含 义 范 例 说 明
CSS不能统计计算元素中的数据;
2018/12/24
4
浏览器对XSL的支持 为了用XSL来处理一个XML文档,需要一个带有XSL引擎的XML处理器。 包含原始数据的XML文档和用来转换该文档的XSLT文档 IE5.0或以上更高版本中支持
2018/12/24
5
XSL基础
XSL的组成 第一部分是XSLT(XSL Transformation)可以把XML文档从一个格 式转换为另一种格式。它使用XPath匹配节点,把一个XML文档转换 为另一个不同的文档。可以是XML、HTML 、无格式文本或任何其他 基于文本的文档。 第二部分是XSL格式化对象(Formatting Object)。格式化对 象提供了CSS的另一种方式,来格式化XML文档以及把样式应用 到XML文档上。XSL在转换XML文档时首先转换文档结构,其次将 文档格式化输出。