我刚开始学习XSL(T),我想知道apply-templates
是如何工作的?我不明白递归应用模板的一部分,因为它写在我的书中。
我理解XSL(T)的XPath部分,但不是apply-templates
正在做什么以及为什么我多次写它。
答案 0 :(得分:16)
您使用<xsl:apply-templates>
来调用已定义的<xsl:template>
:
<xsl:apply-templates>
为集合中的每个节点调用匹配模板。
您可以通过在select
上指定apply-templates
属性来控制处理顺序。
请参阅w3schools中的此示例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>
每次遇到名为apply-templates
的元素时,第一个cd
会调用"cd"
模板。
cd
模板依次调用title
和artist
模板来处理<cd>
的子元素。
title
在artist
之前处理。请注意,源XML中artist
和title
元素的顺序没有区别。
你可以认为apply-templates
与过程语言中的子程序调用类似。
答案 1 :(得分:2)
如果您已经在书中阅读了关于应用模板但尚未理解的内容,那么这里的一些单词将有所帮助尚不清楚。也许你需要一本不同的书:不同的教程风格吸引不同的人。或者也许像http://vimeo.com/15234803这样的在线教程可以获得这些想法。
模板机制的本质是涉及两方。 xsl:apply-templates指令选择一些节点进行处理,模板规则(在它们之间)决定处理应该是什么。这给出了非常松散的耦合和关注点的分离;它更像是面向对象的消息/方法发送,但更灵活。
答案 2 :(得分:1)
如果您了解模板规则,那么您就完成了!即使不是那么容易,他们总会给出惊喜。 Read the specs