XSL-T 3.0中的XPath 3.1如何在java.text.SimpleDateFormat中解析自由格式String到DateTime?

时间:2015-12-02 10:13:10

标签: saxon xslt-3.0 xpath-3.0

我想在XSL-T 3.0中解析几乎自由格式的String到DateTime,因为可以使用java.text.SimpleDateFormat在Java中完成。可能吗?

我使用最新的Saxon HE 9.7.0.1 for Java并使用W3C CR 3.1“XPath和XQuery Functions and Operators 3.1”进行咨询。在W3C CR 3.1中有函数“fn:parse-ietf-date”,但看起来它不像“6.1.94 7:29”那样解析字符串 - 例外:

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

我的XSL-T中是否有任何错误,或者“fn:parse-ietf-date”是否不支持将更多格式的String解析为DateTime?

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

此致,Stepan

我的用例:

shell:

.tnwrapper {
  background-color: #000;
  padding: 5px 5px 5px 9px;
  border-radius: 4px;
  display: -webkit-flex;
  display: flex;
}

.child-images {
   display: -webkit-flex;
   display: flex;
   -webkit-flex-direction: column;
   flex-direction: column;
   -webkit-flex-wrap: wrap;
   flex-wrap: wrap;
   margin: 0 10px;  
   height: 170px;
}

.tnwrapper .tn .thumbnail {
  padding: 4px;
  margin: 10px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.child-images .tn img {
  width: 40px;
}

in.xml:

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

tr.xsl:

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

1 个答案:

答案 0 :(得分:1)

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

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

在EXSLT日期处理库中定义了一个parse-date()函数多年:请参阅http://exslt.org/date/functions/parse-date/index.html - 但它尚未广泛实现,并且未在Saxon中实现。