以下代码中有一个名为“this-article”的变量。
通常,我们以这种方式使用“xsl:apply-templates”
<xsl:apply-templates select="somenode"/>
“somenode”表示子节点。
但是在这个变量中,apply-template是用这种方式编写的。这很奇怪。
<xsl:apply-templates select="." mode="id"/>
如果你解释它的含义,我将不胜感激。
<!-- ============================================================= -->
<!-- "make-article" for the document architecture -->
<!-- ============================================================= -->
<xsl:template name="make-article">
<!-- Generates a series of (flattened) divs for contents of any
article, sub-article or response -->
<!-- variable to be used in div id's to keep them unique -->
<xsl:variable name="this-article">
<xsl:apply-templates select="." mode="id"/>
</xsl:variable>
<div id="{$this-article}-front" class="front">
<xsl:apply-templates select="front | front-stub"/>
</div>
<!-- body -->
<xsl:for-each select="body">
<div id="{$this-article}-body" class="body">
<xsl:apply-templates/>
</div>
</xsl:for-each>
<xsl:if test="back | $loose-footnotes">
<!-- $loose-footnotes is defined below as any footnotes outside
front matter or fn-group -->
<div id="{$this-article}-back" class="back">
<xsl:call-template name="make-back"/>
</div>
</xsl:if>
<xsl:for-each select="floats-group">
<div id="{$this-article}-floats" class="back">
<xsl:call-template name="main-title">
<xsl:with-param name="contents">
<span class="generated">Floating objects</span>
</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates/>
</div>
</xsl:for-each>
<!-- more metadata goes in the footer -->
<div id="{$this-article}-footer" class="footer">
<xsl:call-template name="footer-metadata"/>
<xsl:call-template name="footer-branding"/>
</div>
<!-- sub-article or response (recursively calls
this template) -->
<xsl:apply-templates select="sub-article | response"/>
</xsl:template>
答案 0 :(得分:1)
我不知道这段代码到底在做什么,但它是一种常见的设计模式。假设你想根据它们的“重要性”决定是否显示元素(或省略它们)。然后,您可能有一组用于计算元素重要性的规则:
<xsl:template match="p" mode="importance">high</xsl:template>
<xsl:template match="span[@class='x']" mode="importance">medium</xsl:template>
<xsl:template match="emph[@class='x']" mode="importance">low</xsl:template>
要计算当前元素的重要性,您可以
<xsl:variable name="importance">
<xsl:apply-templates select="." mode="importance"/>
</xsl:variable>
这种代码通常由完全掌握模板规则价值的人编写,以便开发可扩展,基于规则,可重用和多态的代码。非常值得阅读这些代码并从中学习。