首页 百科知识 XSLT简介

XSLT简介

时间:2023-10-15 百科知识 版权反馈
【摘要】:早期的XSL包括两部分,前一部分是转换XML文件,将XML文件架构转换成另一个架构,或非xml文件;后一部分是格式化XML文件,格式化元素内容的样式便于显示。现在,XSL一般只在作为XSL格式化对象时才被提到,以区别于XSLT。表3-17中是XSLT的一些用来处理转换功能的默认元素。XSLT<xsl: template>元素是用于创建模板的。Match的属性的作用是使模板和XML与元素相结合。单独的“/”表示为XML的所有文件及根节点。

XSLT简介

早期的XSL包括两部分,前一部分是转换XML文件,将XML文件架构转换成另一个架构,或非xml文件;后一部分是格式化XML文件,格式化元素内容的样式便于显示。因为这些功能服务着两个截然不同的目的,于是在1999年4月份,W3C正式将XSL标准的前半部(关于转换语法的叙述)从XSL中分出来,并为它起了一个新名子,叫XSLT。现在,XSL一般只在作为XSL格式化对象(XSL-FO)时才被提到,以区别于XSLT。XSL-FO有许多功能与层叠式样式表(CSS)及HTML标签集发生了重叠,我们这里主要讲的是XSLT。

2.XSLT语法

XSLT可以像DTD一样被作为一个外部文件调用,下面是一个简单的XSLT的例子。

例3-13

XML文件:hello.xml

01<? xml version=“1.0”encoding=“GB2312”>

02<? xml-stylesheet type=“text/xsl”href=“hello.xslt”>

03<hello>HELLO!!!</hello>

XSLT文件:hello.xslt

01<? xml version=“1.0”encoding=“GB2312”>

02<xsl:stylesheet version=“1.0”>

03<xsl:templatematch=“/”>

04<html>

05<head><title>简单的XSLT</title></head>

06<body>

07<h2><center><xsl:value-of select=“hello”/></center></h2>

08</body>

09</htm l>

10</xsl:template>

11</xsl:stylesheet>

上例中XML文件的第二行设定调用hello.xslt文件来完成转换,XSLT文件的编写严格遵守了XML的语法要求,它自身也是一个格式良好的XML文件。一个XSLT文件在声明为XML文件后,以<xsl: stylesheet>为根目录,根目录下就可以由一些<xsl: template>元素组成,每个元素后面就可以指定转换后的输出数据。表3-17中是XSLT的一些用来处理转换功能的默认元素。


表3-17

img46


续表

img47

1)<xsl: template>元素

XSLT<xsl: template>元素是用于创建模板的。Match的属性的作用是使模板和XML与元素相结合。Match属性也可以为整个XML定义模板。Match属性值是一个XPath表达式。在给出的第一个例子中,match属性的值为“/”,即表示整个文档都使用后面的定义。

2)<xsl: apply-templates>元素

<xsl: apply-templates>元素将模板应用于当前元素或应用于当前元素的子节点。

如果我们想在<xsl: apply-templates>元素中添加一个select[选择]属性,那么它仅处理与属性值相匹配的子元素以及这一子元素后面的元素,这样我们就可以使用select属性,指定子节点的处理从何处开始了。下面是一个例子。

例3-14

<xsl:templatematch=“book”>

<b><xsl:value-of select=“id”/></b>

<xsl:apply-templates select=“version”/>

</xsl:template>

上例中如果不用<xsl:apply-templates>元素,则xslt处理器只是对book元素进行匹配,找到book元素的id子元素而对book的其他元素不进行处理。使用了<xsl:apply-templates select=“version”/>元素后,xslt处理器还将从book的子元素version开始继续查找book的孙元素中的id元素进行转换。

3)<xsl:call-template>元素

<xsl:call-template>元素的作用是:请求一个指定的模板。上面已经提到<xsl:template>元素用于创建模板,在创建时如果用name属性给模板起个名字,那么就可以用<xsl:call-template>元素来对该模板进行调用;如果需要传递参数,则在模板建立时用子元素xsl:param,每一个xsl:param元素为一个参数,用name属性标明参数名称,而在调用时用xsl:with-param元素引入模板函数。下面是一个例子。

例3-15

建立模板:

<xsl:template name=“book”>

<xsl:param name=“id”/>

………………

</xsl:template>

调用模板:

<xsl:call-template name=“book”>

<xsl:with-param name=“id”/>

</xsl:call-template>

<xsl:value-of>元素

<xsl:value-of>元素可以用来选取XML元素以及把它添加到已被转换的输出流里中。如下所示:

<xsl:templatematch=“item”>

<b><xsl:value-of select=“title”/></b>

</xsl:template>

XSLT处理器首先找到item元素,<xsl:value-of>的select属性就获取title的内容,并将它插入htm l标记<b>中,select属性的值可以是xPath的位置路径。

4)<xsl:element>元素

<xsl:element>元素的作用是:在输出文档中创建一个元素节点。

例3-16

<xsl:for-each select=“booklist/book”>

<xsl:element name=“author”/>

</xsl:for-each>

上例给booklist的子元素book增加了一个名为author的子元素。

5)<xsl:attribute>元素

<xsl:attribute>元素的作用是:给元素添加属性。注意:如果<xsl: attribute>元素所要添加的属性在元素中已经存在,那么原来的属性将被<xsl:attribute>中添加的属性替换。

例3-17

<book>

<xsl:attribute name=“author”>

</book>

上例表示给book元素加上一个名为author的属性。

6)<xsl:comment>元素

<xsl:comment>元素的作用是:创建一个注释。

例3-18

<xsl:comment>This is a comment!</xsl:comment>

7)<xsl:for-each>元素

<xsl:for-each>元素的作用是:在指定的节点组中循环操作每个节点。

例3-19

<xsl:for-each select=“booklist/book”>

<tr>

<td><xsl:value-of select=“id”/></td>

<td><xsl:value-of select=“bookname”/></td>

<td><xsl:value-of select=“price”/></td>

</tr>

</xsl:for-each>

这样在booklist元素的所有book子元素将按照表格的形式在浏览器中进行输出。

8)<xsl:if>元素

<xsl:if>元素包含了一个模板。仅当制定的情况为true[真]时,才使用该模板。使用<xsl: choose>元素时,可以与<xsl:when>元素和<xsl: otherwise>元素一起使用来表达多个情况测试。

例3-20

<xsl:for-each select=“booklist/book”><xsl:if test=“price> 10”><tr>

<td><xsl:value-of select=“id”/></td>

<td><xsl:value-of select=“bookname”/></td>

<td><xsl:value-of select=“price”/></td>

</tr>

</xsl:if>

</xsl:for-each>

上例中只有price大于10的book元素才按照格式进行输出。

9)<xsl:copy>元素

<xsl:copy>元素的作用是:创建一个当前节点的复制版本。当前节点的命名空间节点也会被自动复制,但是当前节点中的子节点和属性将不会自动复制。

10)<xsl:sort>元素

<xsl:sort>元素的作用是:对输出文档进行排序。<xsl:sort>总是写在<xsl:for-each>元素(对每一个元素进行排序)或<xsl:apply-templates>元素(对选定元素的子元素进行排序)里。

例3-21

<xsl: for-each select=“booklist/book”>

<xsl:sort select=“id”order=“descending”>

<tr>

<td><xsl:value-of select=“id”/></td>

<td><xsl:value-of select=“bookname”/></td>

<td><xsl:value-of select=“price”/></td>

</tr>

</xsl: for-each>

上例的输出结果将按照book元素的子元素id的大小来排序,descending表示由大到小排序,如果是ascending,则表示由小到大排序。

3.XML Path Language

XPath是一种语言,一种节点位置的语言,用来描述XML元素的位置,就像电脑硬盘中的文件路径,它并不是一种查询语言。在实际使用过程中,XPath和XSLT总是混在一起使用,使用XSLT时XML文件中的元素进行操作,我们首先要明确元素的位置,而XPath就是可以帮助我们找到制定节点的定位指令。

XPath语言的主要目的就是描述节点相对其他节点的位置,也就是选择那些符合条件的节点,我们称为“位置路径”,位置路径的运算符见表3-18。


表3-18

img48

根据上表所示的各个运算符,下面我们来具体举例说明它们的用法。

单独的“/”表示为XML的所有文件及根节点。如果要指定元素,我们可以用“/”指定出具体的元素。例如:/book/ file/ subject,这个例子中就指出了book这一根元素下的file子元素的subject子元素。//subject表示根元素下的所有subject元素,而/book//subject则表示book元素下的所有subject元素。“*”是用字符,从它的名字我们就可以看出来,它可以指代所有的元素和属性。例如“/book/*”就表示book元素下的所有的元素,“*/ subject”就表示所有元素的subject子元素。“@”可以帮助我们找到元素的属性,例如“/book@ price”表示book元素的price属性。对于一些特殊条件的查找,我们可以在[]中标出特殊的条件,例如“/book/file[2]”表示book子元素中的第二个file元素,“/book[@ price= 3]”表示所有具有price属性并且属性值为3的book元素。“|”可以帮助我们进行条件组合,例如“//book|// subject”表示所有的book和subject元素。

除了用这些运算符号来表述位置路径外,我们还可以用轴位置路径的方式来表示它,轴指明了节点之间的关系。具体的轴名称及说明见表3-19。


表3-19

img49

轴位置路径的使用方式也非常简单,只要在路径之后使用“:”连接索引条件就可以了,下面通过几个例子说明它。例如:“//child∶∶file”表示所有子元素file,“/descendant-or-self∶∶book[@ price= 3]”表示book拥有price属性且属性值为3的所有下层元素,同时也包括book元素自身。

Xpath还为我们提供了一些函数,以帮助获取所需的元素,见表3-20。


表3-20

img50

在这里,我们只是提到了最为简单的几个Xpath函数,有兴趣的同学可以自己去参考一些资料。接下来通过两个例子来了解这些函数简单的使用方式,例如“//*[count(file)= 3]”表示所有拥有三个file子元素的元素,“/book/file[position()= 2]”表示book的第二个file子元素。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈