读XML in a Nutshell (5)

本篇的内容包括Chapter 8 XSL Tansformations。
XSLT的思想就是采用逐层的方式遍历所有的Node(相当于一个n层的for语句嵌套),在这个遍历的过程中,使用xsl的template来控制输出内容。有些时候,单纯的一次遍历是不够的,xsl提供了一个mode机制,通过声明若干个mode来实现多次遍历(同个mode下面重复的template好像只有一个能被执行,至于如何选择,还看不懂)。这一章只是介绍了XSLT的一些基本内容,如果真正要用,还要去看专门介绍XSLT的书。
以下是要点:

1.XSL文件的document node可以使用styolesheet或者transform tag,两个都一样,如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>
如果像上面一样没有任何template,则将输出所有的element的content,而attribute,comment等等是不会输出的,这个种行为是由默认的template决定。

2.在xml文档种如果要指明采用某个xsl做transform,则可以在document element之前加入以下的指令:
<?xml-stylesheet type="application/xml" href="xxx"?>

3.Template的使用格式如下,注意match里面的xpath只能用abbreviate form,而且经测试是不能使用“..”来指向父节点的。
<xsl:template match="person">A Person</xsl:template>

4.Template里面可以包含文字,即literal data characters,或者literal result element,即一般的tag,当然要使xsl满足well form这个条件。

5.要输出某个值,可以使用value-of,如果该值是出现在literal result element的attribute中,可以使用“{xxx}”格式,例子如下:
<xsl:value-of select="last_name"/>
<name first="{first_name}" initial="{middle_initial}" last="{last_name}" />

6.在template里面可以使用apply-templates这个tag来控制遍历的方向,需要注意的是,如果在一个template里面没有apply-templates这个tag,那么遍历会到此结束。与template的match不同,经试验,apply-templates的select是允许使用“..”的。如果select被忽略的话,那么默认是所有的子节点,格式如下:
<xsl:apply-templates select="name"/>
<xsl:apply-templates/>

7.默认的规则可以用templat表示如下,需要注意的是attribute,comment,processing-instructure虽然有template,但是由于他们不被认为是element的child node,所以在默认情况下不会被输出。对于namespace,由于xpath里面没有相应的函数,所以其默认规则无法用template来表示。
<xsl:template match="text( )|@*"><xsl:value-of select="."/></xsl:template>
<xsl:template match="*|/"><xsl:apply-templates/></xsl:template>
<xsl:template match="processing-instruction()|comment( )"/>

8.Mode的使用格式如下,需要注意的是,对于每个不同的mode,XSLT处理器都会使用默认的规则,除非在该mode下明确指定template,同时,经过测试,所有被命名的mode都必须被default的那个mode调用apply-templates后才能被使用。
<xsl:template match="person" mode="toc"><xsl:apply-templates select="name" mode="toc"/></xsl:template>

9.关于namespace,如果在xpath里面需要用到namespace,那么只要在之前随便哪个地方用xmlns:xxx声明就好。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值