《第5章之XSL转换XML文档.ppt》由会员分享,可在线阅读,更多相关《第5章之XSL转换XML文档.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章之XSL转换XML文档 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望5.1 XSL5.1 XSL概述概述5.1.1 XSL基本概念基本概念 XML关心的是数据的结构,并能很好、方便地关心的是数据的结构,并能很好、方便地描述数据。但是,数据的显示外观也是很重要的描述数据。但是,数据的显示外观也是很重要的一个方面,一个方面,W3C为为XML数据显示发布了两个建议数据显示发布了两个建议规范规范CSS(层迭样式表)和(层迭样式表)和XSL(可扩展样式语(可扩展样式
2、语言)。言)。本本章章前前半半部部分分重重点点讲讲述述怎怎样样用用CSS显显示示XML标标记记中中的的文文本本内内容容,下下半半部部分分讲讲述述XSL。XSL提提供供了了比比CSS更更强强大大的的显显示示数数据据的的能能力力,利利用用XSL可可以把以把XML转换成转换成HTML从而有美观的数据显示。从而有美观的数据显示。XSL的全称是的全称是eXtensible Stylesheet Language,即可扩展样式语言,是目前用来设计,即可扩展样式语言,是目前用来设计XML文档文档显示样式的主要技术之一。显示样式的主要技术之一。XSL样式表文档的内容完全符合样式表文档的内容完全符合XML的语法
3、规的语法规定,因而可以将其看成是一种特殊的定,因而可以将其看成是一种特殊的XML文档。文档。在显示在显示XML文档时,文档时,XSL 样式表要比样式表要比CSS样样式表更具威力且更富弹性。一个式表更具威力且更富弹性。一个XML文档链接相文档链接相关的关的XSL样式表后,即可直接在样式表后,即可直接在IE 浏览器中打开,浏览器中打开,并按样式表指定的格式显示出文档内容。并按样式表指定的格式显示出文档内容。5.1.2 XML节点树节点树XML文档的层次结构像是一颗倒挂的树,称文档的层次结构像是一颗倒挂的树,称为为XML节点树。文档中的每一个组件,包括处理节点树。文档中的每一个组件,包括处理指令、注
4、释或各个元素都是节点树中的一个节点。指令、注释或各个元素都是节点树中的一个节点。XML节点树从代表整个文档的根节点开始,节点树从代表整个文档的根节点开始,其下是其下是XML文档声明、处理指令及根元素等子节文档声明、处理指令及根元素等子节点,而在根元素之下则是各层次子元素构成的一点,而在根元素之下则是各层次子元素构成的一系列子节点。系列子节点。注意:根节点代表整个注意:根节点代表整个XML文档,而根元素文档,而根元素则是指最上层的一个元素,它只是根节点的一个则是指最上层的一个元素,它只是根节点的一个子节点。子节点。例例5.1.xml5.1.3 XSL文档的创建与应用文档的创建与应用1XSL文档的
5、创建文档的创建XSL文档以文档以.xsl为其文件扩展名,与为其文件扩展名,与XML文档一样也是一种文本文件,可用任何一文档一样也是一种文本文件,可用任何一种文本编辑软件进行创建和修改。种文本编辑软件进行创建和修改。2XSL文档的组成文档的组成XSL文档基本组成形式:文档基本组成形式:说明:说明:因为因为XSL本身是一个本身是一个xml文档,所以在开头,文档,所以在开头,需要有需要有XML声明语句,文档中的每一个元素和声明语句,文档中的每一个元素和标记都必须符合标记都必须符合XML规范。规范。XSL文件的根元素必须是由文件的根元素必须是由 xsl:stylesheet 开始的开始的XSL样式表声
6、明语句。样式表声明语句。在在XSL文档的根元素下有若干个模板文档的根元素下有若干个模板(template),),模板用来规定模板用来规定XML文档中所匹文档中所匹配元素的输出内容和输出格式。一个配元素的输出内容和输出格式。一个XSL文档文档至少应包含一个与根节点匹配的模板。至少应包含一个与根节点匹配的模板。在模板中也可以使用各种在模板中也可以使用各种HTML标记。标记。3XSL文档的引用文档的引用在在XML文档中引用文档中引用XSL样式表的方法是在样式表的方法是在序言部分添加如下形式的指令:序言部分添加如下形式的指令:例题例题5-1 p85XSL处理器把处理器把XSL样式表文件转化为样式表文件
7、转化为HTML文件的过程称做文件的过程称做XSL变换(变换(XSL Tranformation,XSLT)。)。IE5.5(以上版本)带有(以上版本)带有XSL处理器。处理器。通过关联通过关联XSL样式表,样式表,XML有效地分离了有效地分离了数据的结构和数据的显示数据的结构和数据的显示,步骤如下:步骤如下:1.首先针对首先针对XML文件编写文件编写XSL样式表文件。样式表文件。2.将将XML文件和文件和XSL样式表关联。样式表关联。3.将将XSL样式表转化为样式表转化为HTML文件文件(浏览器内浏览器内置的置的XSL转化器负责转化器负责)。4 XSL变换与变换与HTML 5.2 XSL5.2
8、 XSL模板模板 5.2.15.2.1样式表文件中的模板样式表文件中的模板样式表的基本结构就是由标若干个称做样式表的基本结构就是由标若干个称做“模板模板”的的XSL标记组成,简称模板。模板都是根标记的标记组成,简称模板。模板都是根标记的子标记,模板标记的名称都是子标记,模板标记的名称都是“template”,例例如:如:模板内容模板内容 一个模板的一个模板的“模板内容模板内容”是由是由HTML标记和嵌标记和嵌入其中的入其中的XSL标记组成。标记组成。模板必须有属性模板必须有属性match,该属性的值是一个,该属性的值是一个特殊的字符串,称做模板的特殊的字符串,称做模板的“标记匹配模式标记匹配模
9、式”。如果如果XML文件中的一个文件中的一个XML标记匹配于标记匹配于XSL样式表文件中的某个模板的样式表文件中的某个模板的“标记匹配模式标记匹配模式”,就称该模板是就称该模板是XML标记匹配的模板或称标记匹配的模板或称XML标标记与该模板相匹配。记与该模板相匹配。一旦匹配就可以使用该模板中的规则把匹配的一旦匹配就可以使用该模板中的规则把匹配的XML元素标记的内容转换成元素标记的内容转换成html从而以某种格式从而以某种格式显示在网页上显示在网页上5.2.2 主模板与主模板与XSLXSL处理器处理器_1_1 1.主主模模板板:在在模模板板中中有有一一个个称称作作“主主模模板板”(或或者者叫叫根
10、根模模板板)的特殊模板的特殊模板,该模板中的该模板中的match属性的值是属性的值是“/”,如下所示:,如下所示:主模板的内容主模板的内容 一个一个XSL样式表文件有且仅有样式表文件有且仅有一个主模板,所谓主模板就是与一个主模板,所谓主模板就是与XML文件中根节点匹配的模板。文件中根节点匹配的模板。见下例:见下例:张大山张大山 1993年年11月月22日出生日出生 最终显示结果:最终显示结果:张大山张大山 1993年年11月月22日出生日出生 5.2.2 5.2.2 主模板与主模板与XSLXSL处理器处理器_2_22.XSL处理器处理器:XSL处理器总是从主模板开始实施处理器总是从主模板开始实
11、施XSL变换。主模板的内容中可以包括调用其它模变换。主模板的内容中可以包括调用其它模板的板的“模板调用模板调用”标记标记:根据上面的根据上面的“标记匹配模式标记匹配模式”找到匹配的模板找到匹配的模板(即模板的(即模板的match属性值和该属性值和该select属性值相匹配)属性值相匹配),然后调用之。,然后调用之。例题例题5-2 p88 5.2.2 主模板与主模板与XSLXSL处理器处理器_2 _2 找到匹配标记的模板找到匹配标记的模板主模板主模板模板调用标记模板调用标记模板模板1模板模板n标记标记1标记标记n执行和标记执行和标记1匹配的模板匹配的模板执行和标记执行和标记n匹配的模板匹配的模板
12、 执行模板执行模板1的内容后得到的文本的内容后得到的文本 执行模板执行模板n的内容后得到的文本的内容后得到的文本 张大山张大山 李小林李小林转换后的结果:转换后的结果:张大山张大山 李小林李小林模板调用模板调用5.3 XSL5.3 XSL节点选择节点选择XSL样式表文件中的模板的格式中涉及到样式表文件中的模板的格式中涉及到“标记标记匹配模式匹配模式”,如下所示:,如下所示:模板内容模板内容 “标记匹配模式标记匹配模式”就是满足一定条件的一族就是满足一定条件的一族XML标记。如果标记。如果XML文件中的文件中的XML标记与模板标记与模板的的“标记匹配模式标记匹配模式”相匹配,就称模板匹配于该相匹
13、配,就称模板匹配于该XML标记,该模板内容将对标记,该模板内容将对XML标记内容实行标记内容实行变换。变换。5.3.1 与与XML子标记匹配的模板子标记匹配的模板 XSL样式表为样式表为XML文件中根标记的子标记提供输出数文件中根标记的子标记提供输出数据的模板,这类模板中的据的模板,这类模板中的“标记匹配模式标记匹配模式”可以是子标可以是子标记的名字或根标记的名字和子标记的名字用记的名字或根标记的名字和子标记的名字用“/”分割。分割。假如假如XML文件的根标记的名字是文件的根标记的名字是student,它有,它有name,sex和和birthday三个子标记,三个子标记,name下又有下又有s
14、core子标记,那子标记,那么下列三个模板分别是这三个子标记相匹配的模板:么下列三个模板分别是这三个子标记相匹配的模板:(1)模板的内容模板的内容(2)模板的内容模板的内容5.3.1 5.3.1 与与XMLXML子标记匹配的模板子标记匹配的模板(3)模板的内容模板的内容 而下列模板是与四个子标记:而下列模板是与四个子标记:name,score,sex和和birthday都相匹配的模板:都相匹配的模板:模板的内容模板的内容 5.3.2 与与xml任意级别的子标记匹配的任意级别的子标记匹配的模板模板通过使用统配符通过使用统配符“*”可以建立匹配于任何级别可以建立匹配于任何级别标记的模板,无论该标记
15、是根标记的第几级子标标记的模板,无论该标记是根标记的第几级子标记。下列模板:记。下列模板:模板的内容模板的内容 是与根标记是与根标记student下的下的name标记下的所有级别标记下的所有级别的子标记相匹配的模板。的子标记相匹配的模板。5.3.2 与与xml任意级别的子标记匹配的任意级别的子标记匹配的模板模板 模板的内容模板的内容 XML文文件件的的标标记记是是树树型型结结构构,使使用用“/”分分割割符符必必须须从从根标记出发根标记出发才能确定出一类标记。下列模板无效:才能确定出一类标记。下列模板无效:模板的内容模板的内容 5.3.2 与与xml任意级别的子标记匹任意级别的子标记匹配的模板配
16、的模板建立匹配于根标记下的任意级别的建立匹配于根标记下的任意级别的xml子标记的子标记的模板还有一种简便的方法,使用模板还有一种简便的方法,使用“/”。模板的内容模板的内容 是与任何名字为是与任何名字为score的标记相匹配,无论该标记的标记相匹配,无论该标记是根标记下的哪一级子标记。是根标记下的哪一级子标记。又如:又如:5.3.2 与与xml任意级别的子标记匹配的任意级别的子标记匹配的模板模板 模板的内容模板的内容 模板的内容模板的内容 P92例例5-35.3.3 选择指定的元素属性选择指定的元素属性在一些在一些XSL样式表的特定标记中,同样可样式表的特定标记中,同样可以选择和输出以选择和输
17、出XML文档元素的属性内容,文档元素的属性内容,其语法格式为:其语法格式为:属性名属性名例如:例如:5.3.3 匹配指定元素属性的模板匹配指定元素属性的模板通过使用通过使用“标记标记属性属性”或或“标记标记属性属性=属性值属性值”可以建立与具有指定属性的标记相匹配模板,可以建立与具有指定属性的标记相匹配模板,这样,我们就让名字相同但属性不同的标记匹配于这样,我们就让名字相同但属性不同的标记匹配于不同的模板。不同的模板。下列模板:下列模板:模板的内容模板的内容是与名字为是与名字为name且具有属性且具有属性ID的标记相匹配的模板,的标记相匹配的模板,无论无论name标记是根标记的哪一级子标记。标
18、记是根标记的哪一级子标记。例题例题5-4 p945.3.45.3.4使用使用“”“”和和“|”“|”给出给出XMLXML标记标记匹配的模板匹配的模板 可以使用可以使用“”来给出一个标记需满足的条件,例如:来给出一个标记需满足的条件,例如:模板的内容模板的内容 是与名字为是与名字为book且具有子标记且具有子标记price的标记相匹配的模板,的标记相匹配的模板,无论无论book标记是根标记的哪一级子标记。标记是根标记的哪一级子标记。可以使用可以使用“|”给出几个可以选择的标记,例如:给出几个可以选择的标记,例如:模板的内容模板的内容是与标记名字为是与标记名字为“单价单价”、“库存量库存量”或或“
19、生产日期生产日期”等标记相匹配的模板,无论这些标记是根标记的哪一级等标记相匹配的模板,无论这些标记是根标记的哪一级子标记。子标记。5.45.4常用的常用的XSLXSL标记标记5.4.1 xsl:for-each的用法的用法“xsl:for-each”XSL标记的格式如下:标记的格式如下:内容内容 该该XSL标记必须在模板中使用。标记必须在模板中使用。XSL处理器根据处理器根据“xsl:for-each”标记中的中的标记中的中的“标记匹配模式标记匹配模式”到到XML文件中寻找第一个文件中寻找第一个与与“标记匹配模式标记匹配模式”匹配的匹配的XML标记,标记,一旦找到这样的一旦找到这样的XML标记
20、就对标记就对“xsl:for-each”标记中的标记中的“内内容容”实施变换,并将变换后的内容嵌入到实施变换,并将变换后的内容嵌入到HTML文件中。文件中。然后,再寻找下一个和然后,再寻找下一个和“标记匹配模式标记匹配模式”匹配的匹配的XML标记,直标记,直到没有匹配的标记为止。到没有匹配的标记为止。例题例题5-7 p995.4.1 xsl:for-each5.4.1 xsl:for-each的用法之模板调用的用法之模板调用对于不带对于不带select属性的模板调用标记,应当作为属性的模板调用标记,应当作为“xsl:for-each”标记中的子标记来使用:标记中的子标记来使用:其它内容其它内容
21、 其它内容其它内容 XSL处理器首先根据处理器首先根据“xsl:for-each”标记中标记中的中的的中的“标记匹配模式标记匹配模式”到到XML文件中寻找第一文件中寻找第一个和个和“标记匹配模式标记匹配模式”匹配的标记匹配的标记而而模板调用标记就模板调用标记就会调用与当前找到的标记下的所有级别子会调用与当前找到的标记下的所有级别子标记相匹配的模板。即相当于执行以下模标记相匹配的模板。即相当于执行以下模板调用:板调用:然后,再寻找下一个和然后,再寻找下一个和“标记匹配模式标记匹配模式”匹配的标记,直到没有匹配的标记为止。匹配的标记,直到没有匹配的标记为止。XSL处理器将依次将处理器将依次将“xs
22、l:for-each”标记标记变换后的内容嵌入到变换后的内容嵌入到HTML文件中。文件中。例题例题5-5 p965.4.1 xsl:for-each5.4.1 xsl:for-each的用法之模板调用的用法之模板调用5.4.2 xsl:value-of的用法的用法 “xsl:value-of”XSL标记的格式为:标记的格式为:该该XSL标记必须在模板中使用,即作为模板的标记必须在模板中使用,即作为模板的子孙标记。当子孙标记。当“标记匹配模式标记匹配模式”是特殊的是特殊的“.”时,可以将时,可以将简写为简写为 XSL处理器将处理器将“xsl:value-of”标记变换为和标记变换为和“标记匹配模
23、式标记匹配模式”相匹配的相匹配的XML标记及其子孙标标记及其子孙标记的文本内容。记的文本内容。5.4.2 xsl:value-of的用法的用法 其中的其中的将被变换将被变换为为“张三张三”标记及其子标记的文本内容,张三一定标记及其子标记的文本内容,张三一定是是“大学生大学生”的子标记。的子标记。将被变换为将被变换为“大学生大学生”标记及其子标记的文本内容。标记及其子标记的文本内容。注意:注意:xsl:value-of 标记只可能输出父标记及其子标记只可能输出父标记及其子孙标记的文本内容。孙标记的文本内容。例题例题5-8 p101 ,例题,例题5-9 p1025.4.3 xsl:if的用法的用法
24、 内容内容 该该XSL标记必须在模板中使用,如果和标记必须在模板中使用,如果和“.”匹匹配配XML标记有该子标记,就可以使用就执行标记有该子标记,就可以使用就执行内容内容部分,否则就不执行。例如:部分,否则就不执行。例如:5.4.3 xsl:if的用法的用法 内容内容 表示当前标记下有子标记,并且子标记有表示当前标记下有子标记,并且子标记有内指定值的属性,内指定值的属性,则执行内容部分。如:则执行内容部分。如:5.5 XSL5.5 XSL应用实例应用实例P152例例5.16P170例例5.21练习题练习题(1)样式表的根元素为()样式表的根元素为()。)。A.xsl:stylesheet B.
25、xsl:import C.xsl:include D.xsl:template(2)在)在xsl中,匹配中,匹配XML的根节点使用(的根节点使用()。)。A.*号号 B.号号 C./号号 D.XML中根元素名称中根元素名称(3)()()元素来访问所有符合条件的子节点。)元素来访问所有符合条件的子节点。A.xsl:if B.xsl:for-each C.xsl:choose D.xsl:otherwise(4)添加多个限制条件,使用()添加多个限制条件,使用()号分隔。)号分隔。A.|B.|C./D.ACBCA练习题练习题(1)将)将XML文档与文档与XSL文档链接,需要设置文档链接,需要设置stylesheet指令的指令的type属性为(属性为()。)。(2)应用模板元素使用()应用模板元素使用()。)。(3)匹配任意节点使用()匹配任意节点使用()。)。(4)()()用于匹配当前节点,包括处理指)用于匹配当前节点,包括处理指令、注释和文本节点。令、注释和文本节点。(5)对于不带对于不带select属性的模板调用标记,应属性的模板调用标记,应当作为(当作为(for-each)标记中的子标记来使用)标记中的子标记来使用text/xsl xsl:apply-templates*点号点号
限制150内