1

ソース スキーマには、BIRTH_DAY、BIRTH_MONTH、および BIRTH_YEAR の 3 つの要素があります。これらをターゲット スキーマで単一の要素 (DOB) に変換する必要があります。DOB は、次の 10 文字の形式に従います。

YYYY-MM-DD

どうすればいいですか?

4

2 に答える 2

2

ここに1つのオプションがあります...

XML 入力

<doc>
    <BIRTH_DAY>1</BIRTH_DAY>
    <BIRTH_MONTH>1</BIRTH_MONTH>
    <BIRTH_YEAR>2012</BIRTH_YEAR>
</doc>

XSLT1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="doc">
        <DOB>
            <xsl:value-of select="concat(BIRTH_YEAR,'-',
                format-number(BIRTH_MONTH,'00'),'-',
                format-number(BIRTH_DAY,'00'))"/>
        </DOB>
    </xsl:template>
</xsl:stylesheet>

XML 出力

<DOB>2012-01-01</DOB>

別の月の形式に合わせて編集します。

これは、XSLT 2.0 でははるかに簡単ですが、1.0 では月の数値を返す名前付きテンプレートを使用します。以下の例では、月全体または月の最初の 3 文字が使用されている場合、数値の月が返されます。大文字と小文字も区別されません。

XML 入力

<doc>
    <BIRTH_DAY>1</BIRTH_DAY>
    <BIRTH_MONTH>NOV</BIRTH_MONTH>
    <BIRTH_YEAR>2012</BIRTH_YEAR>
</doc>

XSLT1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:variable name="vUpper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
    <xsl:variable name="vLower" select="'abcdefghijklmnopqrstuvwxyz'"/>

    <xsl:template match="doc">
        <xsl:variable name="vMonth">
            <xsl:choose>
                <xsl:when test="number(BIRTH_MONTH)">
                    <xsl:value-of select="format-number(BIRTH_MONTH,'00')"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:call-template name="getMonth">
                        <xsl:with-param name="pMonth" select="BIRTH_MONTH"/>
                    </xsl:call-template>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <DOB>
            <xsl:value-of select="concat(BIRTH_YEAR,'-',
                $vMonth,'-',
                format-number(BIRTH_DAY,'00'))"/>
        </DOB>
    </xsl:template>

    <xsl:template name="getMonth">
        <xsl:param name="pMonth"/>
        <xsl:variable name="vLCmonth" select="translate(substring($pMonth,1,3),$vUpper,$vLower)"/>
        <xsl:choose>
            <xsl:when test="$vLCmonth='jan'">01</xsl:when>
            <xsl:when test="$vLCmonth='feb'">02</xsl:when>
            <xsl:when test="$vLCmonth='mar'">03</xsl:when>
            <xsl:when test="$vLCmonth='apr'">04</xsl:when>
            <xsl:when test="$vLCmonth='may'">05</xsl:when>
            <xsl:when test="$vLCmonth='jun'">06</xsl:when>
            <xsl:when test="$vLCmonth='jul'">07</xsl:when>
            <xsl:when test="$vLCmonth='aug'">08</xsl:when>
            <xsl:when test="$vLCmonth='sep'">09</xsl:when>
            <xsl:when test="$vLCmonth='oct'">10</xsl:when>
            <xsl:when test="$vLCmonth='nov'">11</xsl:when>
            <xsl:when test="$vLCmonth='dec'">12</xsl:when>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>

XML 出力

<DOB>2012-11-01</DOB>
于 2012-11-01T18:02:29.807 に答える
0

CONCAT機能を使用できます。

fn:concat(string1、string2、...)

これが良いです:

于 2012-11-01T17:53:02.947 に答える