1

我有以下 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

4

2 回答 2

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>
于 2013-01-11T21:39:39.563 回答
1

我也会推荐这种方法:

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

这样您就可以动态控制生成的 XML。

于 2013-01-11T21:59:33.923 回答