XSLT может вставить текущую дату?

Разговор, поскольку кто-то, кто провел довольно мало времени, работая с JPA (Персистентность Java API, в основном стандартизированный API ORM для Java/J2EE/EJB), который включает, в спящем режиме, EclipseLink, Toplink, OpenJPA и другие, я совместно использую некоторые свои наблюдения.

  1. ORMs не быстры. Они могут соответствовать, и большую часть времени соответствующий в порядке, но в среде низкой задержки большого объема они нет - нет;
  2. На языках программирования общего назначения как Java и C# Вам нужно очень большое волшебство заставить их работать (например, время загрузки, переплетаясь в Java, инструментарии, и т.д.);
  3. При использовании ORM, вместо того, чтобы добраться далее от SQL (который, кажется, намерение), Вы будете поражены, сколько времени Вы тратите тонкую настройку XML и/или аннотации/атрибуты, чтобы заставить Ваш ORM генерировать производительный SQL;
  4. Для сложных запросов, действительно нет никакой замены. Как в JPA существуют некоторые запросы, которые просто не возможны, которые находятся в необработанном SQL и когда необходимо использовать необработанный SQL в JPA, это не симпатично (C#/.Net, по крайней мере, имеет динамические типы - var - который намного более хорош, чем Объектный массив);
  5. существует очень много "глюков" при использовании ORMs. Это включает непреднамеренное или неожиданное поведение, то, что необходимо создать в возможности сделать обновления SQL базы данных (при помощи обновления () в JPA или похожих методах, потому что JPA кэшами по умолчанию все так это не поймает прямое обновление базы данных - рабочий прямой SQL обновляет, является общей производственной поддержкой деятельности);
  6. объектно-реляционное несоответствие всегда собирается вызвать проблемы. С любой такой проблемой существует компромисс между сложностью и полнотой абстракции. Время от времени я чувствовал, что JPA зашел слишком далеко и поразил правовые нормы убывающей доходности, где хит сложности не был выровнен по ширине абстракцией.

существует другая проблема, которая берет немного больше объяснения.

традиционная модель для веб-приложения должна иметь слой персистентности и уровень представления (возможно с сервисы или другие промежуточные слои, но это важные два для этого обсуждения). ORMs вынуждают твердое представление покинуть Ваш слой персистентности до уровня представления (т.е. Ваши объекты).

Одно из критических замечаний большего количества необработанных методов SQL - то, что Вы заканчиваете со всеми этими VOs (объекты значения) или DTOs (объекты передачи данных), которые используются просто одним запросом. Это рекламируется как преимущество ORMs, потому что Вы избавляетесь от этого.

Вещью являются те проблемы, не уходят с ORMs, они просто перемещаются до уровня представления. Вместо того, чтобы создать VOs/DTOs для запросов, Вы создаете пользовательские объекты представления, обычно один для каждого представления. Как это лучше? По моему скромному мнению, это не.

я записал об этом в ORM или SQL: Мы там уже? .

Моя предпочтительная технология персистентности (в Java) в эти дни является ibatis. Это - довольно тонкая обертка вокруг SQL, который делает 90% + того, что JPA может сделать (это может даже сделать ленивую загрузку отношений хотя не хорошо зарегистрированный), но с намного меньше служебным (с точки зрения сложности и фактического кода).

Это подошло в прошлом году в приложении GWT, которое я писал. Большой перевод от EclipseLink до объектов представления в реализации услуги. Если бы мы использовали ibatis, было бы намного более просто создать соответствующие объекты с ibatis и затем передать их полностью вверх и вниз по стеку. Некоторые пуристы могли бы утверждать, что это - Bad™. возможно, так (в теории), но я говорю Вам что: это привело бы к более простому коду, более простому стеку и большей производительности.

88
задан Eric Anastas 15 October 2009 в 21:14
поделиться

3 ответа

XSLT 2

Функции даты доступны изначально, например:

<xsl:value-of  select="current-dateTime()"/>

Также есть current-date () и current-time () .

XSLT 1

Используйте пакет расширения даты и времени EXSLT.

  1. Загрузите пакет date and times из GitHub .
  2. Извлеките date.xsl в расположение ваших файлов XSL.
  3. Установите заголовок таблицы стилей.
  4. Импортируйте date.xsl .

Например:

<xsl:stylesheet version="1.0" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="date"
    ...>

    <xsl:import href="date.xsl" />

    <xsl:template match="//root">
       <xsl:value-of select="date:date-time()"/>
    </xsl:template>
</xsl:stylesheet>

111
ответ дан 24 November 2019 в 07:33
поделиться

Есть ли у вас контроль над запуском преобразования? Если это так, вы можете передать текущую дату в XSL и использовать $ current-date внутри вашего XSL. Ниже показано, как вы объявляете входящий параметр, но зная, как вы выполняете преобразование, я не могу сказать вам, как передать значение.

<xsl:param name="current-date" />

Например, из сценария bash используйте:

xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml

Затем, в xsl вы можете использовать:

<xsl:value-of select="$current-date"/>
14
ответ дан 24 November 2019 в 07:33
поделиться

For MSXML parser, try this:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:my="urn:sample" extension-element-prefixes="msxml">

    <msxsl:script language="JScript" implements-prefix="my">
       function today()
       {
          return new Date(); 
       } 
    </msxsl:script> 
    <xsl:template match="/">

        Today = <xsl:value-of select="my:today()"/>

    </xsl:template> 
</xsl:stylesheet>

Also read XSLT Stylesheet Scripting using msxsl:script and Extending XSLT with JScript, C#, and Visual Basic .NET

14
ответ дан 24 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: