Я хотел бы разбирать почти свободный формат String to DateTime в XSL-T 3.0, так как это можно сделать на Java, используя java.text.SimpleDateFormat. Является ли это возможным?XPath 3.1 в XSL-T 3.0 Как анализировать свободный формат String to DateTime, как в java.text.SimpleDateFormat?
Я использую последнюю версию Saxon HE 9.7.0.1 для 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» - Исключение:
Ошибка на char 17 в xsl: value-of/@ select on line 20 column 47 of tr.xsl: 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 to DateTime (надеюсь, навсегда). Также он уже изобретен на Java и широко используется. Внедрение этого в Saxon-HE было бы очень оценено мной, хотя я знаю, что довольно просто вызвать java.text.SimpleDateFormat в Saxon-PE или Saxon-EE в моем сценарии XSL-T.
С уважением, Степан
Мой вариант использования:
оболочки:
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>