2011-05-27 82 views
0

我目前正在爲一些查找艾滋病的XSL樣式表工作,但我相信我在樣式表中的多個模板之間有衝突。誠然,我對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

你可以發佈你獲得的輸出和你想要的輸出嗎? – 2011-05-27 18:49:12

+3

也許有用也有第二個模板的完整代碼。 – 2011-05-27 18:51:48

回答

0

只有在使用xsl:call-template顯式調用命名模板時,纔會調用命名模板。只有在選擇與xsl:apply-templates指令中匹配的節點時,纔會調用模板規則(其中一個具有匹配屬性)。這應該解釋爲什麼你的模板沒有執行。

+0

我明白你的意思了。我在代碼中移動了一些東西,現在佈局的「item」模板和用於格式化的「render」模板都會在找到各自的匹配項後調用。但即使如此,只調用了「項目」佈局模板。 「項目」模板帶來的樣式可能會覆蓋格式渲染嗎? – librarion 2011-05-31 15:59:04