2015-12-02 1 views
0

Я хотел бы разбирать почти свободный формат 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> 

ответ

1

Функция parse-ietf-date предназначена специально для парсинга дат, используемых в различных стандартах IETF, которые скорее ориентированы на США (например, они всегда выражают месяц как имя месяца в месяц и используют (месяц, день, год) заказ. Он не был разработан как универсальное решение для дат в произвольных форматах.

Вы выбираете, в основном, либо (a), чтобы вызывать парсер общего назначения в Java через функции расширения, либо (b) писать XSLT-код для анализа конкретных форматов дат, с которыми вы хотите обращаться.

Функция анализа данных даты() определена в библиотеке обработки даты EXSLT в течение многих лет: см. http://exslt.org/date/functions/parse-date/index.html - но она не была широко внедрена и не реализована в Саксоне.

Смежные вопросы