apply-templates如何工作?

Luc*_*uke 8 xml xslt

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

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

miz*_*izo 19

<xsl:apply-templates>用来调用<xsl:template>已定义的:s.

<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>
Run Code Online (Sandbox Code Playgroud)
  • 每次遇到名为的元素时,第一个apply-templates调用cd模板"cd".

  • cd模板依次调用titleartist模板来处理子元素<cd>.

  • title之前处理过artist.请注意,源XML中的元素artisttitle元素的顺序没有区别.

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


Mic*_*Kay 5

如果您在一本书中阅读了有关 apply-templates 的内容但还没有理解它,那么就不清楚这里的几句话是否会有所帮助。也许你需要一本不同的书:不同的教程风格吸引不同的人。或者,也许在线教程(例如http://vimeo.com/15234803)可以让您了解这些想法。

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