《XML网页技术实用教程》第8次课

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1XML网页技术实用教程主编余以胜中国水利水电出版社2项目4个人网上图书馆网页设计―用XSL实现个性化显示小结34.2XSL变换的基本步骤在XSL变换中,XSL处理程序读取XML文档和XSL样式表。基于处理程序在XSL样式单中找到的指令,输出新的XML文档。XML文件XSL文件HTML文件关联变换44.3XSL文件的结构?xmlversion=1.0encoding=utf-8?xsl:stylesheetxmlns:xsl=:templatematch=/.../xsl:templatexsl:templatematch=标记匹配模式.../xsl:templatexsl:templatematch=标记匹配模式.../xsl:template/xsl:stylesheet54.3.1XSL样式表中的模板1、模板标记XSL样式表的基本结构就是由若干个称为“模板”的标记组成,简称模板。模板都是根标记的子标记,模板标记的名称都是template,例如:xsl:templatematch=标记匹配模式模板内容.../xsl:template62、根模板一个XSL样式表必须要有一个根模板。所谓根模板就是和XML文件中的根标记匹配的模板,但是,如果使用浏览器来处理XSL变换,根模板的“标记匹配模式”必须是“/”,如:xsl:templatematch=/模板内容.../xsl:template7XSL样式表根模板:xsl:templatematch=/模板内容.../xsl:template模板1:xsl:templatematch=标记匹配模式模板内容.../xsl:template模板n:xsl:templatematch=标记匹配模式模板内容.../xsl:template84.3.2XSL模板的调用XSL样式表文件根模板:模板调用标记模板1:模板1的内容模板2:模板2的内容XML文件标记1标记2html对模板1的内容实施变换后的文本对模板2的内容实施变换后的文本/html生成HTML文件寻找匹配的标记寻找匹配的模板94.4进行XSL变换的方法4.4.1关联XSL关联XSL文件的方法很简单,只在需要使用XSL文件来定义样式的XML文档中添加如下格式的处理指令就行了:?xml-stylesheethref=Book4-1.xsltype=text/xsl?104.4.2XSL文件中使用HTML标记xsl:templatematch=/htmlheadmetahttp-equiv=Content-Typecontent=text/html;charset=utf-8/titlexsl:value-ofselect=FirstPage/title1//title/headbodybackground=wz_bg.gif/body/html/xsl:template114.4.3在XSL样式表中使用CSS在XSL文件中使用CSS有两种方式:一种是可以直接设置在文件中使用的HTML标记的Style属性;另外一种是在文件中使用Style、/Style标记来单独定义HTML标记的样式。使用Style、/Style标记的方式如下所示:12styletype=text/css#text{display:block;position:absolute;top:30%;left:20%;width:60%;height:60%;border:2pxsolid;}/style…134.5常用的XSL标记样式表的基本结构就是模板,模板也是一种语言,模板中有一个重要的参数就是“match”,该参数的值决定了哪些XML标记和该模板相匹配。模板变换过程中,还可以使用许多重要的子孙标记,比如,前面用过的“xsl:value-of”标记,“xsl:apply-templates”标记和“xsl:for-each”标记等等。它们都可以作为模板标记的子标记,而且这些XSL标记还可以形成父子关系。144.5.1使用xsl:value-of标记定义和用法:xsl:value-of元素可提取选定节点的值。xsl:value-of元素可用于选取某个XML元素的值,并把它输出。注释:select属性(必选)的值是一个XPath表达式。它的工作原理类似对文件系统的定位,比如用一个斜杠来选择子目录。154.5.2使用xsl:for-each标记定义和用法:xsl:for-each元素可遍历指定的节点集中的每个节点。语法:xsl:for-eachselect=expression!--Content:(xsl:sort*,template)--/xsl:for-each属性:属性值描述selectexpression必需。被处理的节点集。164.5.3使用xsl:element标记xsl:element元素将元素插入到输出文档中。元素名由xsl:element元素的name特性中的特性值模板给出。元素的内容来自于xsl:element元素的内容,此元素可能包括要插入这些项的xsl:attribute、xsl:pi和xsl:comment指令.174.5.4使用xsl:attribute标记只使用文字特性,就可以将特性包括在输出文档中。例如,要插入带有ALIGN特性(其值为CENTER)的DIV元素,只需在样式单的适当位置处键入DIVALIGN=CENTER和/DIV即可。但是,为了确定特性值,有时甚至是为了确定特性名,常常不得不依赖于从输入文档中读取的数据。184.5.5使用xsl:pi生成处理指令标记xsl:pi元素将指令放在输出文档中。处理指令的目标由所需的name特性指定。xsl:pi元素的内容成为处理指令的内容。例如,下面的规则将PROGRAM元素用gcc处理指令代替:xsl:templateselect=PROGRAMxsl:piname=gcc-04/xsl:pi/xsl:template194.5.6使用xsl:comment生成注释标记xsl:comment元素在输出文档中插入注释。它没有特性。其内容为注释文本。例如,xsl:templateselect=”ATOM”xsl:commentTherewasanatomhereonce./xsl:comment/xsl:template204.5.7使用xsl:text生成文本xsl:text元素将其内容作为文字文本插入到输出文档中。例如,下面的规则将每个ATOM元素用字符串“Therewasanatomhereonce”代替。xsl:templateselect=ATOMxsl:textTherewasanatomhereonce./xsl:text/xsl:template214.5.8使用xsl:copy复制当前节点xsl:copy元素将源代码复制到输出文档中。子元素、特性和其他内容不会自动复制。但是,xsl:copy元素的内容也是选择要复制这些内容的xsl:template元素。当将文档从某个标记符号集转换成相同的或相近的相关标记符号集时,这种方法通常是有用的。例如,下面的模板规则删除原子的特性和子元素,并用其内容值来代替:xsl:templatematch=”ATOM”xsl:copyxsl:apply-templates//xsl:copy/xsl:template224.5.9使用xsl:number为节点计数xsl:number在输出文档中插入格式化整数。由expr特性计算出来的数值,通过四舍五入成最接近的整数,然后根据format特性值,对此整数进行格式化,从而获得整数值。为这两个特性提供了恰当的缺省值。234.5.10使用xsl:if标记xsl:if元素提供了根据模式来改变输出文档的简单途径。xsl:if的test特性含有选择表达式,用来计算布尔值。如果此表达式为true,即输出xsl:if元素的内容;否则,不输出xsl:if元素的内容。244.5.11使用xsl:choose标记根据几个可能的条件,xsl:choose元素从几个的输出结果中选择一个。xsl:when子元素提供各种条件及其相关的输出模板。xsl:when元素test特性为布尔值的选择表达式。如果多个条件都为真,那么只显示第一个为真的条件。如果xsl:when元素都不为真,那么显示xsl:otherwise子元素的内容。254.6匹配节点的模式xsl:template元素的match特性支持复杂的语法,允许人们精确地表达想要和不想要与哪个节点匹配。xsl:apply-templates、xsl:value-of、xsl:for-each、xsl:copy-of和xsl:sort的select特性支持功能更加强大的语法的超集,允许人们精确地表达想要和不想要选择哪个节点。264.6.1匹配根节点为了使输出的文档结构整洁。从XSL变换的第一个输出内容应为输出文档的根元素。因此,XSL样式单一般以应用于根节点的规则开始。要在规则中指定根节点,可将其match特性设置为合适的值。xsl:templatematch=/htmlxsl:apply-templates//html/xsl:template274.6.2匹配元素名最基本的模式只包含一个元素名,用来匹配所有带有该名的元素。例如,下面的模板与ATOM元素相匹配,并将ATOM元素的ATOMIC_NUMBER的子元素标成粗体:xsl:templatematch=”ATOM”bxsl:value-ofselect=”ATOMIC_NUMBER”/b/xsl:template284.6.3使用/字符匹配子节点在match特性中并不局限于当前节点的子节点,可使用/符号来匹配指定的元素后代。当单独使用/符号时,它表示引用根节点。但是,在两个名称之间使用此符号时,表示第二个是第一个的子代。例如,ATOM/NAME引用NAME元素,NAME元素为ATOM元素的子元素。在xsl:template元素中,这种方法能够用来只与某些给定类型的元素进行匹配。例如,下面的模板规则将ATOM子元素的SYMBOL元素标记为strong。此规则与不是ATOM元素的直系子元素的SYMBOL元素无关。294.6.4使用//符号匹配子代有时候,尤其是使用不规则的层次时,更容易的方法就是越过中间节点、只选择给定类型的所有元素而不管这些元素是不是直系子、孙、重孙或其他所有的元素。双斜杠(//)引用任意级别的后代元素。例如,下面的模板规则应用于PERIODIC_TABLE的所有NAME子代,而不管它们具有何种层次的关系:xsl:templatematch=PERIODIC_TABLE//NAMEixsl:value-ofselect=.//i/xsl:template304.6.5通过ID匹配xsl:templatematch=”id(‘e47’)”bxsl:value-ofselect=”.”//b/xsl:template314.6.6使用@来匹配特性@符号根据特性名与特性相匹配,并选择节点。方法很简单,只需在要选择的特性前加上@符号。324.6.7使用comments()来匹配注释为了选择注释,可使用comment()模式。尽管此模式有类似函数的圆括号,但实际上决不带任何参数。要区分不同的注释不太容易。xsl:templatematch=”DENSITY”xsl:value-ofselect=”.”/xsl:value-ofselect=”@UNITS”/xsl:apply-templatesselec

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功