2013-01-11 22 views
1

我有以下XSLT元素:請問?「XSL:申請模板模式」複製」複製整個節點,或僅僅是數據

<xsl:template match="Product"> 
    <product> 
     ... 
     <xsl:if test="string-length(PerProductShipping) > 0"> 
      <xsl:apply-templates select="PerProductShipping" mode="Copy"> 
       <xsl:with-param name="name">per_product_shipping</xsl:with-param> 
      </xsl:apply-templates> 
     </xsl:if> 
    </product> 
</xsl:template> 

<xsl:template match="*" mode="Copy"> 
    <xsl:param name="name" select="name()"/> 
     <xsl:element name="{$name}"> 
      <xsl:value-of select="."/> 
    </xsl:element> 
</xsl:template> 

這是我的電流輸出:

<per_product_shipping>8.79</per_product_shipping> 

這是我的期望的輸出:

<per_product_shipping is_absolute="true">8.79</per_product_shipping> 

is_absolute="true"元件將被硬編碼,並且總是存在

我怎樣才能添加到這個xsl:template屬性?

+0

我們應該怎麼知道?你沒有向我們展示'xsl:template'。 – JLRishe

+0

這是代碼中唯一定義的「模板」。也就是說,我沒有在任何地方定義單獨的模板。 – Codeman

+0

''標籤在哪裏?你目前得到的輸出是什麼? – JLRishe

回答

2

如在聊天討論的,你的模式=「複製」模板是創建與所述參數指定的名稱的元件的通用模板,然後賦予它作爲被匹配的節點相同的文本值。我相信,在這種情況下,最明智的辦法是更換此:

<xsl:apply-templates select="PerProductShipping" mode="Copy"> 
    <xsl:with-param name="name">per_product_shipping</xsl:with-param> 
</xsl:apply-templates> 

與此:

<per_product_shipping is_absolute="true"> 
    <xsl:value-of select="PerProductShipping" /> 
</per_product_shipping> 
1

我也推薦這種方法:

<xsl:element name="per_product_shipping"> 
<xsl:attribute name="is_absolute">true</xsl:attribute> 
<xsl:value-of select="..." /> 
</xsl:element> 

這種方式你對生成的XML進行動態控制。