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>
个人感觉这个标签简直太好用了,可以让我们复用很多模版,这样我们可以为不同的内容设计不同的模版,最后要做的只是把他们整合起来就好了。