(Как) Можете ли вы получить текущую дату в XSLT / XPath, используя обработку .Net XPath - PullRequest
1 голос
/ 27 января 2011

Поскольку MS не реализует Xpath / XSL 2.0, а их расширение XPath не включает функцию current-date (), как этого добиться в XSLT?

NB. У меня нет контроля над вызывающим кодом, поэтому я не могу передать его в качестве параметра или настроить справочную DLL и т. Д.

Спасибо Matt

1 Ответ

1 голос
/ 31 января 2011

Получил этот отзыв от форума блогов MSDN.Публикация здесь для полноты:

Привет Мэтт,

Есть в основном 3 способа достижения того, что вам нужно.

  1. Передайте дату как внешний параметр(подробности см. здесь: http://msdn.microsoft.com/en-us/library/dfktf882(VS.80).aspx) - это идеальное решение, но из того, что вы написали, это может быть невозможно

  2. Используйте скрипт внутри таблицы стилей - вот пример

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:my="put-your-namespace-uri-here"               
    exclude-result-prefixes="msxsl my">
    
      <xsl:output method="xml"/>
    
      <msxsl:script language="C#" implements-prefix="my">
        public string Now(){
          return DateTime.Now.ToString("O");
        }
      </msxsl:script>
    
      <xsl:template match="/">
        <now>
          <xsl:value-of select="my:Now()" />
        </now>
      </xsl:template>
    </xsl:stylesheet>
    

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

  3. Используйте объект расширения - аналогично приведенному выше, но у вас нет проблем с динамическимssemblies.Вот некоторые подробности о том, как это сделать: http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addextensionobject.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...