2015-12-02 17 views
0

我想在XSL-T 3.0中解析几乎免费格式的String到DateTime,因为可以使用java.text.SimpleDateFormat在Java中执行此操作。可能吗?XSL-T 3.0中的XPath 3.1如何在java.text.SimpleDateFormat中将自由格式的字符串解析为DateTime?

我正在使用最新的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” - 例外:

错误在字符17 xsl:value-of/@在第20行tr.xsl的第47列选择: FORG0010:无效的IETF日期值6.1.94 7:29(日期分隔符丢失) 内置模板规则 无效的IETF日期值6.1。 94 7:29(日期分隔符丢失)

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

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

问候,斯捷潘

我用例:

壳:

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> 

回答

1

parse-ietf-date函数专门用于解析各种IETF标准中使用的日期,这些标准相当以美国为中心(例如,它们总是将月份表示为英文月份名称,并使用(月,日,年)订购。它不是以任意格式的日期设计的通用解决方案。 (a)通过扩展函数调用Java中的通用日期解析器,或者(b)编写XSLT代码来解析要处理的特定日期格式。

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

相关问题