我目前正在为一些查找辅助工具开发XSL样式表,但我相信样式表中的多个模板之间存在冲突。当然,我对XSL很新,所以我可能在这里遗漏了一些东西。我希望我已经包含了所有必要的细节。
以下是我希望模板采取行动的代码:
<c05 level="item"><did><unittitle><title render="italic">Souvenir</title>, undated</unittitle></did>
<scopecontent>
<p>With sketches of Confederate Generals and Confederate flags and a <emph render="doublequote">bird's eye view</emph> of Charleston.</p>
</scopecontent>
</c05>
现在,有问题的2个模板分别格式化我的容器列表布局和一些文本格式。布局的模板在这里:
<xsl:template name="item">
<xsl:variable name="title">
<xsl:if test="did/unitid">
<xsl:value-of select="did/unitid"/><xsl:text>. </xsl:text>
</xsl:if>
<xsl:value-of select="did/unittitle"/>
<xsl:if test="did/unitdate">
<xsl:text>, </xsl:text><xsl:value-of select="did/unitdate"/>
</xsl:if>
</xsl:variable>
<div style="margin-left:80px; padding-top:10px;"><xsl:value-of select="$title" /></div>
<div class="c01sc" style="margin-left:80px;"><xsl:value-of select="scopecontent" /></div>
<xsl:element name="a">
<xsl:call-template name="addidtoc"/>
</xsl:element>
</xsl:template>
这是文本格式的代码。它调用另一个执行某些格式化的模板:
<xsl:template match='emph'>
<xsl:call-template name='render'/>
</xsl:template>
<xsl:template name='render'>
<xsl:choose>
<xsl:when test="@render='italic'">
<xsl:element name="i">
<xsl:call-template name="addid"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
etc.....
</xsl:template>
问题是,只执行第一个布局模板的操作。我的布局样式已生成,但由于emph标记应该是双引号的区域仍然是普通的。这是模板层次结构的问题,还是我做了一些完全错误的事情?希望这有一定道理。我很感激我能得到任何帮助!
答案 0 :(得分:0)
只有在使用xsl:call-template显式调用命名模板时才会调用它。仅当您在xsl:apply-templates指令中选择匹配的节点时,才会调用模板规则(具有匹配属性的规则)。这可以解释为什么你的模板没有执行。