<xsl:apply-templates>深入理解原理

http://blog.csdn.net/xiaoqiangpku725/article/details/4038282


有两种基本方法提取源元素中的内容。 stylesheet 使用 xsl:value-of 来获得,此时 已经处理得元素的内容不会再被进一步处理。 stylesheet 中的 xsl:apply-templates 指令却不同,解析器将按照模板的定义逐个继续处理。

也就是说:
1. xsl:apply-templates 放在xsl:template中使用,可以理解为子函数.

2. 多个xsl:template同时使用时,已经MATCH元素得子元素将不被处理.

 

如果还不能理解,看下面得例子:
XML源码:
<source>
<company>microsoft</company>
<employee>
     <firstName>lily</firstName>
     <surname>hu</surname>
</employee>
<telephone>
     <telephone1>1</telephone1>
     <telephone1>2</telephone1>
</telephone>
</source>

XSLT stylesheet 1:
//使用 xsl:value-of 来获得,此时元素的内容不会再被进一步处理。

<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="company">
     <b>
          <xsl:value-of select="."/>
     </b>
</xsl:template>
<xsl:template match="employee">
     <b>
          <xsl:value-of select="."/>
     </b>
</xsl:template>
<xsl:template match="surname"> //surname是employee得子元素,故不作处理;
     <i>
          <xsl:value-of select="."/>
     </i>
</xsl:template>

<xsl:template match="telephone1"> 
     <i>
          <xsl:value-of select="."/>
     </i>
</xsl:template>

</xsl:stylesheet>

输出:
microsoft
<b>
lily
hu
</b>
<i>
1
</i>

XSLT stylesheet 2
//使用apply-templates 指令,解析器将按照模板的定义逐个继续处理


<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="employee">
     <b>
          <xsl:apply-templates select="firstName"/>
     </b>
     <b>
          <xsl:apply-templates select="surname"/>
     </b>
</xsl:template>
<xsl:template match="surname">
     <i>
          <xsl:value-of select="."/>
     </i>
</xsl:template>
</xsl:stylesheet>

输出:
<b>lily</b>
<b>
  <i>hu</i>
</b>

                                                                                      wwater 发表于 2006-11-16 17:44:00

  比如说,有这样一个文档结构  
  <Root>  
      <Row>  
          <name>1</name>  
          <age>12</age>  
      </Row>  
      <Row>  
          <name>2</name>  
          <age>13</age>  
      </Row>  
  </Root>  
   
  你写了一个模板匹配Row  
  <xsl:template   match="Row">  
  <xsl:apply-templates/>  
  </xsl:template>  
   
  <xsl:apply-templates/>会自行匹配Row下的所有Element和Attribute  
  如果你没有为name和age写模板,缺省显示它的文本信息。如果你定义了以下两个模板  
  <xsl:template   match="name">  
  姓名:<xsl:value-of   select="text()"/>  
  </xsl:template>  
  <xsl:template   match="age">  
  年龄:<xsl:value-of   select="text()"/>  
  </xsl:template>  
  它就会一一进行匹配。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值