XSL-T 3.0中的XPath 3.1如何像java.text.SimpleDateFormat中那样将自由格式的字符



我想在XSL-T 3.0中解析几乎免费格式的String到DateTime,就像在Java中使用Java.text.SimpleDateFormat一样。这可能吗?

我正在使用最新的Saxon HE 9.7.0.1 for Java,并向W3C CR 3.1"XPath和XQuery函数和运算符3.1"咨询它。W3C CR 3.1中有函数"fn:parse-ietf date",但它看起来不能像"6.1.94 7:29"那样解析字符串-异常:

tr.xsl第20行第47列xsl:value-of/@select中的char 17处出错:FORG0010:无效的IETF日期值6.1.94 7:29(缺少日期分隔符)内置模板规则中无效的IETF日期值6.1.94 7:29(缺少日期分隔符)

我在我的XSL-T中犯了什么错误吗?或者"fn:解析ietf日期"不支持更多要解析为DateTime的字符串格式?

如果问题不在我这边,是否可以在W3C CR 3.1中添加类似fn:parseTime的函数,作为Java 8 Java.text.SimpleDateFormat类的"副本",并支持其所有的日期和时间模式?它可以解决String到DateTime的解析(我希望永远)。此外,它已经在Java中发明并被广泛使用。我将非常感谢在Saxon HE中实现它,尽管我知道,在我的XSL-T脚本中,在Saxon-PE或Saxon-EE中调用java.text.SimpleDateFormat应该很容易。

问候,Stepan

我的用例:

外壳:

java -jar .saxon9he.jar -t -s:.in.xml -xsl:.tr.xsl -o:.out.xml

in.xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>6.1.94 7:29</root>

tr.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:math="http://www.w3.org/2005/xpath-functions/math"
  exclude-result-prefixes="xs math"
  version="3.0">
  <xsl:template
    match="/root">
    <xsl:element
      name="root">
      <xsl:element
        name="originalValue">
        <xsl:value-of
          select="./text()"/>
      </xsl:element>
      <xsl:element
        name="newValue">
        <xsl:value-of
          select="parse-ietf-date(./text())"/>
      </xsl:element>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

函数parse ietf date专门用于解析各种ietf标准中使用的日期,这些标准相当以美国为中心(例如,它们总是将月份表示为英文月份名称,并使用(month,day,year)顺序。它并不是为任意格式的日期设计的通用解决方案。

您的选择基本上是(a)通过扩展函数调用Java中的通用日期解析器,或者(b)编写XSLT代码来解析您想要处理的特定日期格式。

多年来,在EXSLT日期处理库中已经定义了一个parse-date()函数:请参阅http://exslt.org/date/functions/parse-date/index.html-但它并没有得到广泛的实施,也没有在撒克逊实施。

相关内容

  • 没有找到相关文章

最新更新