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 に答える