XSLT非标准日期解析

时间:2018-07-10 23:27:40

标签: xslt xslt-2.0

我想在XSLT 2.0中这样一个日期:

<unitdate>September 9, 2018</unitdate>  

<unitdate>2018 September 9</unitdate>

或者这个:

<unitdate>June 1976</unitdate> 

<unitdate>1976 June</unitdate>

我没有任何标准化的XS日期。

我有一个身份转换:

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

然后这就是我开始的内容:

<xsl:template match="//unitdate">
</xsl:template>

1 个答案:

答案 0 :(得分:2)

您还可以使用xsl:analyze-string来完成其他操作,您需要指定多少模式,但这将是更多的代码,但很容易:

<xsl:template match="unitdate">
    <unitdate>
        <xsl:analyze-string select="." regex="([a-zA-Z]+) ([0-9][0-9]?),? ([0-9][0-9][0-9][0-9])">
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(3),regex-group(1),regex-group(2)"/>
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <xsl:analyze-string select="." regex="([a-zA-Z]+) ([0-9][0-9][0-9][0-9])">
                    <xsl:matching-substring>
                        <xsl:value-of select="regex-group(2),regex-group(1)"/>
                    </xsl:matching-substring>
                    <xsl:non-matching-substring>
                        <xsl:value-of select="."/>
                    </xsl:non-matching-substring>
                </xsl:analyze-string>
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </unitdate>
</xsl:template>