Запись эффективного XSLT

Вы можете добавить модуль в свой проект и добавить туда этот Sub (корректируя имена листов и TextBox, если необходимо):

Sub SetText(txt As String)
    Worksheets("Sheet1").TextBox1.Text = txt
    Worksheets("Sheet2").TextBox1.Text = txt
    Worksheets("Sheet3").TextBox1.Text = txt
    Worksheets("Sheet4").TextBox1.Text = txt
    Worksheets("Sheet5").TextBox1.Text = txt
End Sub

Затем, в событии Change для каждого TextBox добавьте это

[ 111]

Чтобы очистить весь текст, вы можете установить .TextBox1.Text = ""

13
задан Community 23 May 2017 в 11:51
поделиться

5 ответов

Я думаю, что хороший способ ответить на этот вопрос - подойти к нему с другой стороны , Какие практики делают XSLT неэффективным и почему?

Некоторые вещи, которые я видел, которые приводят к неэффективному XSLT:

  1. Чрезмерное использование для каждого . ] Все это сказали; Я говорю это снова. Я считаю, что for-each часто является признаком того, что разработчик пытается использовать традиционные методы программирования на декларативном языке.

  2. Недостаточное использование XPath. Много плохого XSLT, которое я видел, существует только потому, что разработчик не понимал предикаты, спецификаторы осей, position () и current () , и поэтому он реализовал логику с помощью Вместо этого XSLT-конструкции.

  3. Недостаточное использование метаданных. Иногда вы можете исключить огромное количество XSLT, предоставив вашему преобразованию метаданные.

  4. Недоиспользование предварительной обработки. Если, например, XML-документ содержит данные, которые должны быть проанализированы с использованием манипуляции строк XSLT, часто гораздо проще выполнить весь синтаксический анализ вне XSLT и либо добавить проанализированные результаты в XML, либо передать проанализированные результаты в качестве аргумента. преобразовать. Я видел удивительно не поддерживаемый XSLT, реализующий бизнес-логику, который было бы тривиально реализовать в C # или Python.

Самая большая проблема, с которой я сталкиваюсь в своем собственном мире XSLT (у меня есть несколько 3000 преобразований строк, которые я поддерживаю), это мертвый код. Я уверен, что в моих преобразованиях есть шаблоны, которые никогда больше не будут использоваться, потому что они повторное тестирование никогда не возникнет снова. Невозможно программно определить, является ли что-то вроде живым или мертвым, поскольку оно зависит от того, что метаданные не могут сказать вам.

5
ответ дан 1 December 2019 в 20:57
поделиться

Лучшая практика 1 : Не понимая, что такое это очень относительно, конечно.

Это не так для XSLT, так как конструкция xsl: for-each имеет тенденцию быть

  • более читабельной

для новичка, но на самом деле

  • менее структурирована,
  • менее прост,
  • менее лаконичен и
  • намного менее понятен

, чем шаблоны, и только

  • одинаково читабелен (в лучшем случае !!) для этого. с минимальным опытом работы с шаблонами.

НИКОГДА, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭЛЕМЕНТ !

Признаюсь, название несколько преувеличены, существуют, я был рассказал, в каких случаях "xsl для каждого" может иметь свои достоинства, но эти случаи очень, очень редко.

Мне когда-то приходилось придумывать довольно сложный клиентский сайт xml / xslt в менее чем за неделю, и использовал для каждого элемента повсюду. Теперь, спустя несколько лет и, вроде, мудрее я не торопился и переписал исходный код, используя только шаблоны. Код теперь намного чище и более адаптируемый.

Либо вы это знаете, либо вы должны: и почти всегда путь Если вы XSL-IN, и вы не полностью понимаю эти теги, прекрати свою работу сейчас, изучи их, получи ага-эрлебнис, и продолжай свою работу как возрожденный (wo) человек.

8
ответ дан 1 December 2019 в 20:57
поделиться

I. Элегантный код 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 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 :

II. Некоторые правила


Вот некоторые правила написания «качественного XSLT-кода», взятые из блога Мукула Ганди .

Они могут быть проверены / применены с помощью инструмента , разработанного Мукулом :

  1. DontUseDoubleSlashOperatorNearRoot: избегать использования оператора // около корня большого дерева.

  2. DontUseDoubleSlashOperator: избегать использования оператора // в выражениях XPath.

  3. SettingValueOfVariableIncorrectly: Использование одного шаблона / функции в таблице стилей. Вы можете модулировать код.

  4. OutputMethodXml: использование метода вывода «xml» при генерации HTML-кода.

  5. NotUsingSchemaTypes: таблица стилей не использует ни один из встроенных типов схемы (xs: string и т. Д.), Когда работа в режиме XSLT 2.0.

  6. UsingNameOrLocalNameFunction: использование функции name (), когда может потребоваться использование local-name () (и наоборот).

  7. FunctionTemplateComplexity: размер / сложность функции или шаблона высоки. Существует необходимость в рефакторинге кода.

  8. NullOutputFromStylesheet: таблица стилей не генерирует никакого полезного вывода. Пожалуйста, обратите внимание на логику таблицы стилей.

  9. UsingNamespaceAxis: Использование устаревшей оси пространства имен при работе в режиме XSLT 2.0.

  10. CanUseAbbreviatedAxisSpecifier: Использование спецификаторов длинной оси, таких как child ::, attribute :: or parent :: node ().

  11. UsingDisableOutputEscaping: для атрибута disable-output-escaping установлено значение 'yes'. Пожалуйста, посмотрите на логику таблицы стилей.

  12. NotCreatingElementCorrectly: Создание узла элемента с использованием инструкции xsl: element, когда это было возможно напрямую.

  13. AreYouConfusingVariableAndNode: Возможно, вы путаете ссылку на переменную со ссылкой на узел. (предоставлено Аленом Бенедетти)

  14. IncorrectUseOfBooleanConstants: неправильно использовать логические константы как «true» или «false». (предоставлено Тони Лавинио)

  15. ShortNames: Использование имени одного символа для переменной / функции / шаблона. Используйте значимые имена для этих функций.

  16. NameStartsWithNumeric: Имя переменной / функции / шаблона начинается с цифрового символа

10
ответ дан 1 December 2019 в 20:57
поделиться

Для удобства чтения я использую тег xsl: template . Это очень лаконично и просто в использовании. Просто передать параметры в шаблон. Этот метод называется инкапсуляцией и является одной из основ хорошего программирования.

1
ответ дан 1 December 2019 в 20:57
поделиться

Проблемы с файлами

1. Множество маленьких файлов лучше, чем несколько больших.

Разделите ваш hamburger.xsl на i-bread.xsl и i-beef.xsl.

2. Префикс включенных / импортированных файлов с «i -».

Он служит индикатором того, что файл следует редактировать с осторожностью, так как вы можете нарушить функциональность импорта / включения файлов. Проверьте их, прежде чем вносить изменения.

3. Никогда не включайте / не импортируйте файл без префикса.

Если вы хотите создать cheeseburger.xsl, не включайте hamburger.xsl. Вместо этого включите i-bread.xsl, i-beef.xsl и недавно созданный i-cheese.xsl.

4
ответ дан 1 December 2019 в 20:57
поделиться
Другие вопросы по тегам:

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