XSL-多模板冲突?

时间:2011-05-27 18:04:15

标签: xml xslt

我目前正在为一些查找辅助工具开发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>.&#8201;</xsl:text>
</xsl:if>

<xsl:value-of select="did/unittitle"/>

<xsl:if test="did/unitdate">
<xsl:text>,&#8201;</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标记应该是双引号的区域仍然是普通的。这是模板层次结构的问题,还是我做了一些完全错误的事情?希望这有一定道理。我很感激我能得到任何帮助!

1 个答案:

答案 0 :(得分:0)

只有在使用xsl:call-template显式调用命名模板时才会调用它。仅当您在xsl:apply-templates指令中选择匹配的节点时,才会调用模板规则(具有匹配属性的规则)。这可以解释为什么你的模板没有执行。

相关问题