2012-06-02 59 views
1

在下面的代碼中有一個名爲「this-article」的變量。以這種方式xml樣式表中apply-template的語法

<xsl:apply-templates select="somenode"/> 

「somenode」 是指一個子節點: 「應用模板XSL」

一般來說,我們使用。


但是在這個變量中,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> 

回答

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> 

這種代碼通常被寫入徹底掌握了模板規則的價值,從而能夠開發可擴展的,基於規則的,可重用的和多態的代碼。閱讀這些代碼並從中學習是非常值得的。