apply-templates如何工作?

时间:2011-05-18 18:25:44

标签: xml xslt

我刚开始学习XSL(T),我想知道apply-templates是如何工作的?我不明白递归应用模板的一部分,因为它写在我的书中。

                  

我理解XSL(T)的XPath部分,但不是apply-templates正在做什么以及为什么我多次写它。

3 个答案:

答案 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模板依次调用titleartist模板来处理<cd>的子元素。

  • titleartist之前处理。请注意,源XML中artisttitle元素的顺序没有区别。

你可以认为apply-templates与过程语言中的子程序调用类似。

答案 1 :(得分:2)

如果您已经在书中阅读了关于应用模板但尚未理解的内容,那么这里的一些单词将有所帮助尚不清楚。也许你需要一本不同的书:不同的教程风格吸引不同的人。或者也许像http://vimeo.com/15234803这样的在线教程可以获得这些想法。

模板机制的本质是涉及两方。 xsl:apply-templates指令选择一些节点进行处理,模板规则(在它们之间)决定处理应该是什么。这给出了非常松散的耦合和关注点的分离;它更像是面向对象的消息/方法发送,但更灵活。

答案 2 :(得分:1)

如果您了解模板规则,那么您就完成了!即使不是那么容易,他们总会给出惊喜。 Read the specs