Вопрос

После долгого изучения XAML я вернулся к HTML и JavaScript и понял, что концепция декларативного кода (с точки зрения правил преобразования) является невероятно мощной концепцией.

Несмотря на избыток синтаксиса, обработка XML XSLT является краеугольным камнем программирования декларативных преобразований.Однако мне всегда было трудно понять, как XSLT будет использоваться для повседневных задач (с XML).

Каковы хорошие примеры того, как XSLT элегантно решает задачу программирования, помимо создания HTML?

Я предполагаю, что он хорош для преобразования графиков и повторной обработки данных...

Редактировать:Я надеюсь на реальные примеры: одна из вещей, которая отталкивает меня от полноценного использования xslt, — это визуальная сложность кода.

Это было полезно?

Решение

Часто можно встретить примеры красивого кода XSLT, особенно когда XSLT используется в качестве функционального языка программирования..

Примеры см. Эта статья на FXSL 2.0 -- библиотека функционального программирования для XSLT 2.0.

В качестве языка FP XSLT также является декларативный язык.Это, среди прочего, означает, что человек декларирует, уточняет существующие отношения.

Такой определению часто не требуется никакого дополнительного кода для получения результата — оно само по себе является собственной реализацией или исполняемым определением или исполняемой спецификацией..

Вот небольшой пример.

Это выражение XPath 2.0 определяет "Максимум Главный фактор натурального числа":

if(f:isPrime($pNum))
  then $pNum
  else
    for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
        $vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
        $vDiv2 in $pNum idiv $vDiv1
      return
        max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))

Чтобы произнести это по-английски, максимальный простой делитель числа pNum это само число, если pNum является простым, иначе, если vDiv1 и vDiv2 два фактора pNum, то максимальный простой множитель pNum является большим из максимальных простых множителей vDiv1 и vDiv2.

Как мы можем использовать это для фактического расчета Максимальный простой коэффициент в XSLT? Мы просто завершаем определение выше в <xsl:function> и ...получи результат!

 <xsl:function name="f:maxPrimeFactor" as="xs:integer">
  <xsl:param name="pNum" as="xs:integer"/>

  <xsl:sequence select=
   "if(f:isPrime($pNum))
      then $pNum
      else
        for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
            $vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
            $vDiv2 in $pNum idiv $vDiv1
          return
            max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))
   "/>
 </xsl:function>

Мы можем тогда, вычислить MPF для любого натурального числа, например:

f:maxPrimeFactor(600851475143) = 6857

А насчет эффективности, ну это преобразование занимает всего 0,109 секунды.

Другие примеры элегантного и эффективного кода XSLT.:

Другие советы

Как насчет генерации кода?Я использую это в protobuf-net для создания файлов .cs из модели .proto (экспортируемой как xml) – вот так.В .NET 4.0 шаблоны T4 были бы более очевидным выбором, но до этого момента механизм T4 не был автономным (AFAIK).

Xslt также широко используется для преобразования между различными макетами XML, например, в таких инструментах промежуточного программного обеспечения, как biztalk.

На днях я использовал XSLT.Мне нужно было предоставить возможность пользователю сохранять содержимое элемента управления «дерево» в файл, чтобы он мог отправить его по электронной почте своему начальнику, показать своим внукам и т. д.

Было предложено сохранить его в виде HTML-файла с красивым и аккуратным видом или в формате XML, чтобы можно было обрабатывать его дальше по своему усмотрению.

Поэтому я предложил выводить XML со связанным с ним XSLT, чтобы у них был необработанный XML, но он выглядел хорошо, когда они открывали его в браузере.

Это не идеально (если они перенесут HTML в другое место без XSL, IE вообще откажется его отображать!), но если мы изменим планы, я могу просто изменить продукт, чтобы он позволял пользователю выбирать формат, и если он выберет HTML, все, что мне нужно сделать, это запустить XSLT для XML, чтобы получить HTML, прежде чем сохранить его.

В идеале был бы способ создать автономный HTML-файл, содержащий XML и XSLT, но я не знаю ни одного...это вопрос сам по себе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top