有两种基本方法提取源元素中的内容。 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社区