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>
個人感覺這個標籤簡直太好用了,可以讓我們複用很多模版,這樣我們可以爲不同的內容設計不同的模版,最後要做的只是把他們整合起來就好了。