Chapter 2. Creating and Using Stylesheets中關於模版的引用

1。關於xslt <xsl:include>和<xsl:import>標籤的差異

在一般的應用中可以說兩個標籤都是等同的,你怎麼用都無所謂,但是<xsl:import>標籤有一個優先級的概念

例如你在一個xsl模版中引入了多個外部模版,而正好這些外部模版都對同一個節點產生作用,這個使用<xsl:import>標籤就能更具模版被引入的先後順路來選擇使用與那個模版。最先引入的模版優先級最低。

模版  rule1.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="PLANET">
          <TD><xsl:value-of select="NAME"/></TD>
          <TD><xsl:value-of select="MASS"/></TD>
          <TD><xsl:value-of select="RADIUS"/></TD>
          <TD><xsl:value-of select="DAY"/></TD>
   </xsl:template>
</xsl:stylesheet>

模版 rule2.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="PLANET"> 
          <TD><xsl:value-of select="NAME"/></TD>
          <TD><xsl:value-of select="MASS"/></TD>
          <TD>abc</TD>
          <TD>cba</TD> 
   </xsl:template>
</xsl:stylesheet>

模版   temp.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import href="rule1.xsl"/> 
    <xsl:import href="rule2.xsl"/>
    <xsl:template match="/PLANETS">
        <HTML>
            <HEAD>
                <TITLE>
                    The Planets Table
                </TITLE>
            </HEAD>
            <BODY>
                <H1>
                    The Planets Table
                </H1>
                <TABLE BORDER="2">
                    <TD>Name</TD>
                    <TD>Mass</TD>
                    <TD>Radius</TD>
                    <TD>Day</TD>
                    <xsl:apply-templates/>
                </TABLE>
            </BODY>
        </HTML>
    </xsl:template>

</xsl:stylesheet>

我們可以看到rule1.xsl 和rule2.xsl都同樣對<PLANET>這個節點產生作用,這個時候由於rule2.xsl晚於rule1.xsl導入,所以他的優先級比rule1.xsl高,所有模版temp.xsl將會使用rule2.xsl而不是rule1.xsl。這個特性很有用,當我們有很多模版的時候,就能避免對於不同模版中相同的<xsl:template>產生衝突。也不用擔心模版到底會調用哪個的實現的問題,你可以把它理解爲java的繼承感念,子模版複寫了父模版的方法(感覺這個說法有點變扭,不過我就是這麼理解的,呵呵)。

2。關於模版中已經存在的的<xsl:template>和所到入的外部模版重複時怎麼樣確定具體使用哪個模版

在xslt中<xsl:apply-imports/>可以是我們引用外部模版而不是自身的模版的<xsl:template>

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:import href="rule1.xsl"/> 
    <xsl:template match="/PLANETS">
        <HTML>
            <HEAD>
                <TITLE>
                    The Planets Table
                </TITLE>
            </HEAD>
            <BODY>
                <H1>
                    The Planets Table
                </H1>
                <TABLE BORDER="2">
                    <TR>
                        <TD>Date</TD>
                        <TD>Name</TD>
                        <TD>Mass</TD>
                        <TD>Radius</TD>
                        <TD>Day</TD>
                    <xsl:apply-templates/>
                    </TR>
                </TABLE>
            </BODY>
        </HTML>
    </xsl:template> 
    <xsl:template match="PLANET">
        <TR>
            <TD>4/1/2002</TD>
            <xsl:apply-imports/> <!--在這裏引用的是rule1.xsl的<xsl:template match="PLANET"/>模版 -->
        </TR>
    </xsl:template>
</xsl:stylesheet>

 

 NewVersion of rule1.xsl
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="PLANET"> 
          <TD><xsl:value-of select="NAME"/></TD> 
          <TD><xsl:value-of select="MASS"/></TD> 
          <TD><xsl:value-of select="RADIUS"/></TD> 
          <TD><xsl:value-of select="DAY"/></TD> 
   </xsl:template> 

</xsl:stylesheet>
 
個人感覺這個標籤簡直太好用了,可以讓我們複用很多模版,這樣我們可以爲不同的內容設計不同的模版,最後要做的只是把他們整合起來就好了。
發佈了26 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章