2

私は現在、要素に同じ一致する複数の xsl:template を適用することに固執しています。以下の例は、問題を示しています。

2 つの「テンプレート マッチ」を使用して期待される出力を作成する XSL テンプレートを知っている人はいますか? 技術的な理由により、2 つの「テンプレート」要素を一緒に配置することはできません。

入力

<root>
    <elem>123.45</elem>
    <elem>789.12</elem>
</root>

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:decimal-format name="de" decimal-separator="," grouping-separator="."/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/root/elem">
        <xsl:element name="renamed">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="/root/elem">
        <xsl:element name="elem">
            <xsl:value-of select="format-number(.,'#.##0,0000','de')" />
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

出力:

<root>
    <elem>123,4500</elem>
    <elem>789,1200</elem>
</root>

期待される出力:

<root>
    <renamed>123,4500</renamed>
    <renamed>789,1200</renamed>
</root>
4

2 に答える 2

0

通常、「モード」を使用して、同じノードを異なるテンプレートで処理します。あなたの場合は必要ないと思います。この XSLT を適用すると、次のようになります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:decimal-format name="de" decimal-separator="," grouping-separator="."/>


<xsl:template match="/">
    <root>
    <xsl:apply-templates />
    </root>
</xsl:template>

<xsl:template match="/root/elem">
    <xsl:element name="renamed">
        <xsl:value-of select="format-number(.,'#.##0,0000','de')" />
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

ソース XML に:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <elem>123.45</elem>
 <elem>789.12</elem>
</root>

次の出力が得られます。

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <renamed>123,4500</renamed>
 <renamed>789,1200</renamed>
</root>
于 2013-08-29T14:39:51.257 に答える