我有以下XSLT元素:
<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 :(得分:2)
正如聊天中所讨论的,您的mode =“Copy”模板是一个通用模板,它创建一个具有参数中指定名称的元素,然后为匹配的节点提供相同的文本值。我认为在这种情况下最合适的解决方案是替换它:
<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 :(得分:1)
我也会推荐这种方法:
<xsl:element name="per_product_shipping">
<xsl:attribute name="is_absolute">true</xsl:attribute>
<xsl:value-of select="..." />
</xsl:element>
通过这种方式,您可以动态控制生成的XML。