XSLT函数以YYYYMMDD格式验证日期

msh*_*rir 2 xml xslt

我正在寻找建议来验证一个保存日期的XML元素,我需要在XSLT中使用一个函数来验证它是否是YYYYMMDD格式.

Tom*_*lak 5

注意:以下内容适用于XSLT 1.0版,它没有date数据类型.如果您的XSLT处理器支持never版本,请使用其中一个内置日期函数.


这取决于你想要推进"验证"的程度.

你可以这样做:

<xsl:if test="
  string-length(date) = 8 
  and translate(date, '0123456789', '') = ''
">
  <!-- date looks like it could be valid -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

您还可以进行更彻底的检查:

<xsl:if test="
  string-length(date) = 8 
  and translate(date, '0123456789', '') = ''
  and number(substring(date, 1, 4)) &gt;= 1970
  and number(substring(date, 5, 2)) &lt;= 12
  and number(substring(date, 7, 2)) &lt;= 31
">
  <!-- date looks like it could really be valid -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

但是,后者仍然允许使用20090231.如果要对此进行排除,则调用某种扩展函数可能会变得不可避免.