xsl:template 和 xsl:apply-templates 的用法

时间:2021-03-10 18:33:56

有两种基本方法提取源元素中的内容。 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>  
  它就会一一进行匹配。

5 楼wangwenyou(王文友)回复于 2002-05-25 17:02:00 from CSDN社区