xslt练习_XSLT语法概要

前面已经介绍了XSLT用于将一个XML文档转换成另一个XML文档或另一种类型的文档,通常我们都将其转换成HTML文档,所以本文也是以转换成HTML为例,讲解XSLT的语法。

请看下面的songs.xml文件:<?xml version="1.0" encoding="gb2312"?>

夏天里的一把雨名称>

张三作曲家>

4:20长度>

小天王艺术家>

歌曲>

冬天里的一把雪名称>

王五作曲家>

李四作曲家>

5:28长度>

周董艺术家>

歌曲>

歌曲列表>songs.xslt文件如下:

歌曲列表信息
歌曲列表信息
名称作曲家长度艺术家

然后我们用浏览器打开songs.xml文件,我使用的版本是(IE6.0sp1),结果如下:

26069967_1.jpg这样我们就将XML文件转换成了HTML文件,我们已经看到了XSLT语言的强大,下面让我们具体看看它的语法吧。(我很有耐心的写下去,希望你也很有耐心的看下去!)

一、XSL模板(xsl:template)通过xsl:template元素定义的内容,我们就称之为XSL模板,它规定了转换器怎样将XML文件转换成其它文件(这里是HTML)。修改songs.xslt的内容,如下:<?xml version="1.0" encoding="gb2312"?>

练习使用xsl:template

然后我们通过浏览器打开songs.xml文件,浏览器显示如下:

26069967_2.jpg浏览器中没有显示出什么内容,但是注意看看浏览器的标题栏。那么转换器究竟是怎么工作的呢?

我们通过浏览器打开songs.xml文件,打开后转换器载入songs.xml文件内容,载入后转换器先遇到文档节点,然后在我们定义的xsl模板(xsl:template)中寻找是否有所对应于文档节点的模板,如果有就按照定义的形式输出转换内容。那我们定义的模板有没有文档节点的模板呢,答案是,有。中match属性值中的 "/"就是文档节点。输出了文档节点模板中定义的内容后,转换器会不会继续转换文档节点的子节点呢?现在还不会,因为我们没有告诉转换器继续转换,如果想继续转换它的子节点,就要用到元素。二、xsl:apply-templates我们修改以上songs.xslt文件如下:<?xml version="1.0" encoding="gb2312"?>

练习使用xsl:template

有一首歌曲

通过浏览器打开songs.xml文件,如下:

26069967_3.jpg增加了歌曲列表模板和歌曲模板后,当我们打开songs.xml文件后,转换器又做了哪些工作呢?1、将文档节点与样式表中的模板规则进行比较,该文档节点匹配我们定义的模板规则。

2、输出3、文档节点模板中的元素告诉转换器继续处理文档节点的子节点。4、将文档节点的第一个子节点(xml-stylesheet处理指令节点),与模板规则进行比较,该子节点与任何一个模板都不匹配,所以不输出任何内容。

5、将文档节点的第二个子节点(跟元素歌曲列表节点)与模板进行比较,该节点与我们定义的歌曲列表模板匹配。6、输出

练习使用xsl:template元素告诉转换器继续处理歌曲列表节点的子节点。

8、当遇到第一个子节点(歌曲节点),与模板规则进行比较,匹配我们定义的歌曲模板。

9、输出:

有一首歌曲

注意以上的
标签,空标签必须被关闭。

10、转换第二个子节点(歌曲节点),与模板规则进行比较,匹配我们定义的歌曲模板。

11、输出:

有一首歌曲

12、输出:

13、输出:

14、完成整个文档转换。

三、apply-templates中的select属性

将以上songs.xslt文件中的歌曲模板修改如下:

之后用浏览器打开songs.xml文件,如下图:

26069967_4.jpg 比刚才多出了很多内容,我们仔细一看是歌曲节点的子节点中的内容,我们现在先不考虑子节点中的内容是怎么输出的,但是我们应该知道,当在歌曲模板中增加后,转换器就会继续转换歌曲节点的所有子节点。如果现在我只想告诉转换器只转换歌曲节点下的名称节点,那怎么办呢?修改songs.xslt文件,如下:

再次通过浏览器打开songs.xml文件,如下图:

26069967_5.jpg四、使用xsl:value-of计算节点值我们再次修改songs.xslt文件的内容,如下:<?xml version="1.0" encoding="gb2312"?>

练习使用xsl:template

然后我们用浏览器打开songs.xml文件,如下图:

26069995_1.jpg看到结果后我们应该知道了,是计算作曲家这个元素节点的值。不知道大家有没有注意,在songs.xml文件中有三个作曲家,张三、李四和王五,但是在上例中只是输出了两个,这是为什么呢?这是由于只会计算第一个作曲家节点,后面的不会在进行计算,如果你想计算全部的作曲家节点,那么就应该使用xsl:for-each元素了。五、使用xsl:for-each处理多个节点

修改songs.xslt文件歌曲模板的内容,如下:

用浏览器打开songs.xml文件,如下图:

26069995_2.jpg注意:歌曲模板中的.表示作曲家节点,也就是被循环的节点。

六、匹配节点模板

1、以下代码只匹配文档节点,/表示文档节点

2、以下代码只匹配歌曲列表节点,match属性已经指定了节点名称

3、以下代码匹配所有元素节点,*号表示所有节点,但是通常很少使用。

以下代码匹配以coresun:前缀的节点:

4、以下代码匹配歌曲节点下面的名称节点

若xml文件如下:

周董专集名称>

夏天里的一把雨名称>

张三作曲家>

4:20长度>

小天王艺术家>

歌曲>

歌曲列表>

以上模板只会匹配红颜色的名称节点,而不会匹配蓝颜色的名称节点。

5、以下代码匹配跟元素节点,/*表示根元素节点

6、以下代码匹配任意级别的名称节点

xml文件如下:

周董专集名称>

夏天里的一把雨名称>

张三作曲家>

4:20长度>

小天王艺术家>

歌曲>

歌曲列表>以上模板红颜色的名称节点和蓝颜色的名称节点都会匹配。7、以下代码匹配长度节点或者艺术家节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值