我的源架构中有三个元素:BIRTH_DAY,BIRTH_MONTH和BIRTH_YEAR。我需要在目标模式中将这些转换为单个元素(DOB)。 DOB将遵循以下10种字符格式:
YYYY-MM-DD
我该怎么做?
答案 0 :(得分:2)
这是一个选项......
XML输入
<doc>
<BIRTH_DAY>1</BIRTH_DAY>
<BIRTH_MONTH>1</BIRTH_MONTH>
<BIRTH_YEAR>2012</BIRTH_YEAR>
</doc>
XSLT 1.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>
XSLT 1.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>
答案 1 :(得分:0)