我想在 XSL-T 3.0 中将几乎自由格式的字符串解析为 DateTime,因为可以使用 java.text.SimpleDateFormat 在 Java 中完成。可能吗?
我正在使用最新的 Saxon HE 9.7.0.1 for Java 并使用 W3C CR 3.1“XPath and XQuery Functions and Operators 3.1”咨询它。W3C CR 3.1 中有函数“fn:parse-ietf-date”,但它看起来不能像“6.1.94 7:29”那样解析字符串 - 例外:
tr.xsl 的第 20 行第 47 行的 xsl:value-of/@select 中的字符 17 处出错:FORG0010:内置模板规则中的无效 IETF 日期值 6.1.94 7:29(缺少日期分隔符)无效的 IETF 日期值6.1.94 7:29(缺少日期分隔符)
我是否在我的 XSL-T 中犯了任何错误,或者“fn:parse-ietf-date”不支持更多格式的字符串被解析为 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 应该很容易。
问候, 斯捷潘
我的用例:
壳:
java -jar .\saxon9he.jar -t -s:.\in.xml -xsl:.\tr.xsl -o:.\out.xml
在.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>