Xml 无法在xslt中分析到目前为止的长值

Xml 无法在xslt中分析到目前为止的长值,xml,xslt-1.0,Xml,Xslt 1.0,我有如下xml标记: <row number="3" cols="3"> .. <col number="7">41973</col> </row> .. 41973 其中41973描述了2014年11月30日。 如何在xslt中解析到目前为止的值41973 非常感谢,将1900日期系统中的Excel序列日期号转换为ISO-8601日期(YYYY-MM-DD): XSLT1.0 <xsl:template name="excel-

我有如下xml标记:

<row number="3" cols="3">
..
   <col number="7">41973</col>
</row>

..
41973
其中41973描述了2014年11月30日。 如何在xslt中解析到目前为止的值41973

非常感谢,

将1900日期系统中的Excel序列日期号转换为ISO-8601日期(YYYY-MM-DD): XSLT1.0

<xsl:template name="excel-serial-number-to-date">
    <xsl:param name="excel-serial-number"/>
    <xsl:param name="JDN" select="$excel-serial-number + 2415019 + ($excel-serial-number &lt; 61)"/>
    <xsl:param name="f" select="$JDN + 1401 + floor((floor((4 * $JDN + 274277) div 146097) * 3) div 4) - 38"/>
    <xsl:param name="e" select="4*$f + 3"/>
    <xsl:param name="g" select="floor(($e mod 1461) div 4)"/>
    <xsl:param name="h" select="5*$g + 2"/>

    <xsl:param name="D" select="floor(($h mod 153) div 5 ) + 1"/>
    <xsl:param name="M" select="(floor($h div 153) + 2) mod 12 + 1"/>
    <xsl:param name="Y" select="floor($e div 1461) - 4716 + floor((14 - $M) div 12)"/>

    <xsl:param name="MM" select="format-number($M, '00')"/>
    <xsl:param name="DD" select="format-number($D, '00')"/>

    <xsl:value-of select="concat($Y, '-', $MM, '-', $DD)" />
</xsl:template> 

调用模板的示例:

<output>
        <xsl:call-template name="excel-serial-number-to-date">
            <xsl:with-param name="excel-serial-number" select="41973" />
        </xsl:call-template>
</output>

结果:

<output>2014-11-30</output>
2014-11-30

注意

Excel序列日期编号
60
61
的结果将相同:
1900-03-01
。这是因为Excel与序列号
60
关联的日期
1900-02-29
在公历中不存在。

您使用什么来执行XSLT?如果处理器允许,您最好使用自定义函数。“41973描述2014年11月30日。”通过什么逻辑?我将excel文件中的一个单元格解析为xml并获得上述值。单元格格式为日期,显示的是2014年11月30日。@TrungTrịnh你要回答我的问题吗?@michael.hor257k这就是Excel存储日期的方式。这是自1900-01-00以来的天数。@TrungTrị如果这个答案解决了你的问题,请接受。如果没有,请指出仍然缺少的内容。