但是XSLT不管这样努力,它不可能得到下面的输出结果:
<people>
<name>Hehangjun</people>
</name>
<people>
<name>何杭军</people>
</name>
下一节开始我们来粗看一下XSLT文档的具体细节,看看XSLT文档怎么当领导,看看它怎
么样向XSLT发它的"命令"。
1.2 模板规则
XSLT通过定义一套详细的"规则"来规定XML源树怎样转换到结果树。这些规则称为模板规
则(template rule)。模板规则由两部分构成,模板(template)和模式,其中模板规定
了转换的具体内容,即怎样转换,而模板规则则规定了在什么样的情况下需要应用这个
模板规则,用XSLT的术语来说就是在什么样的情况下需要将模板规则实例化(instanti
ated )。
我们再看一下上述的XSLT代码。
<xsl:template match="/root">
<html>
<title>this is my first xslt programm</title>
<body>
<xsl:for-each select="name">
<xsl:text>Hello world,This is </xsl:text>
<xsl:value-of select="."/>
<xsl:text>Speaking</xsl:text>
<br/>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
在这个<xsl:template>元素中,定义了一个模板规则。
元素<xsl:template>的match属性值"/root"是模式的一个实例。它规定模板规则只有在
XSLT处理器遇到文档元素节点下的root元素节点时被实例化。在XSLT中,模式定义了一
个筛选条件,在该条件下源树中的所有节点要么匹配模式指定的筛选条件,要么不匹配
筛选条件,在匹配筛选条件的情况下,相应的模板规则可以实例化,然后被调用。一般
情况下,一个源树节点满足模式是指该节点是模式表达式表示的结点集合的元素。这句
话听起来有些拗口,我们换一个容易接受的说法。P表示一个模式,{P}表示该模式对应
的结点集合,则节点N匹配模式P当且仅当N是{P}的元素。我们在举一个例子,<xsl:tem
plate match="/person" >,这里/person表示了一个模式,该模式表达式对应了所有根
元素节点下的person元素节点构成的集合,因此如果当前节点是根元素下的person元素
节点,则该节点匹配这个模板规则中的模式。由于模式表达式的语法涉及到了XPATH的内
容,我们将在XPATH中详细讨论模式的语法。
