Почему XSLT, кажется, раздражает столько людей?

Вдохновленный Jon Skeet, версия нецикла, что удар привычки Ваш стек. Также полезная начальная точка, если Вы хотите использовать платформу соединения ветвления.

public static int countOccurrences(CharSequeunce haystack, char needle) {
    return countOccurrences(haystack, needle, 0, haystack.length);
}

// Alternatively String.substring/subsequence use to be relatively efficient
//   on most Java library implementations, but isn't any more [2013].
private static int countOccurrences(
    CharSequence haystack, char needle, int start, int end
) {
    if (start == end) {
        return 0;
    } else if (start+1 == end) {
        return haystack.charAt(start) == needle ? 1 : 0;
    } else {
        int mid = (end+start)>>>1; // Watch for integer overflow...
        return
            countOccurrences(haystack, needle, start, mid) +
            countOccurrences(haystack, needle, mid, end);
    }
}

(Правовая оговорка: Не протестированный, не скомпилированный, не разумный.)

, Возможно, лучшее (однопоточный, никакая поддержка суррогатной пары) способ записать его:

public static int countOccurrences(String haystack, char needle) {
    int count = 0;
    for (char c : haystack.toCharArray()) {
        if (c == needle) {
           ++count;
        }
    }
    return count;
}
13
задан Nosredna 13 July 2009 в 21:48
поделиться

12 ответов

Я думаю, что людям трудно разобраться в XSLT (и хвалить его), потому что он функциональный и декларативный по своей природе, в отличие от программирования на C # или Java. Навигация по документам может оказаться сложной, если операторы XPATH станут умными - хотя это особенность XPATH, а не XSLT. XPATH обычно усложняется, когда во время разработки вы не знаете точную структуру документа, поэтому вы начинаете опрашивать братьев, сестер, потомков и предков. Именно тогда люди, унаследовавшие сложный XSLT, начинают задумываться о смене карьеры!

С XSLT это очень «правильный инструмент для правильной работы». Он разработан для чрезвычайно быстрого и эффективного преобразования XML-документа в другой XML-документ. XSLT почти наверняка является лучшим инструментом для этой цели из-за его расширяемости, того факта, что он был написан для этой цели, широкой поддержки его в xml-процессорах по всем направлениям и, если я еще не упомянул об этом, производительности. Распространенные варианты использования:

  1. преобразование XML-документа, содержащего только данные, в документ, представляющий пользовательский интерфейс, такой как XML-документ
  2. преобразование XML-документа в другую структуру для соответствия другой схеме, например, связи Biz2Biz

Отличной реализацией технологии xslt является проект apache-cocoon, который преобразует XML-документы в несколько выходных форматов, включая html, excel, изображения диаграмм, PDF-файлы с расширяемой архитектурой плагинов. Мы часто используем его для нашей платформы отчетности, и он работает очень хорошо. Когда разработчики начинают с этого, они находят те же знакомые проблемы. Когда они преодолевают их, они обычно пишут, что я здесь.

Однажды я работал с парнем, который не хотел работать с (и изучать) XSLT, и в итоге представил клиенту демо, которое заняло более 20 секунд. для рендеринга страницы. Когда я наконец убедил его использовать XSLT-преобразование вместо его тупого DOM-кода, это заняло менее секунды.

21
ответ дан 1 December 2019 в 17:24
поделиться

Мне нравится xslt, и я использую его довольно часто. Если вы мыслите в терминах функционального программирования (то есть переменных, устанавливаемых один раз, аналогично F # и т. Д.), То он чрезвычайно универсален. Я регулярно использую его для преобразования данных, представления (в частности [x] html) и генерации универсального кода .

Определенно , сильно связанных с программированием; никто, кроме программиста, не стал бы его разглядывать - но это очень мощный инструмент.

У меня есть несколько файлов xslt (разделенных на несколько xsl: import / xsl: include файлов), то есть существенно больше, чем 800, которые вы упомянули в сообщении ... это действительно может (при правильном использовании) быть полнофункциональной средой.

Примечания:

  • лучше всего использовать на сервере; клиентская поддержка упущена
  • несколько ключевых вещей, упущенных в 1.0; регулярное выражение; нечувствительность к регистру; etc
  • может быть сложно, если пробелы важны

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

12
ответ дан 1 December 2019 в 17:24
поделиться

Мне лично не нравится XSLT, потому что он, кажется, сочетает в себе несколько вещей, которые в целом не нравятся сообществу разработчиков:

  • он использует магические строки (XPATH), которые выглядят как шум, также известный как perl reg exs.

    • 1249] теги xml, которые могут делать подробные инструкции - также известный как язык программирования xml.
6
ответ дан 1 December 2019 в 17:24
поделиться

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

Просто из любопытства, что сделали ваши 800 строк XSLT?

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

XSLT - это действительно мощный инструмент в арсенале разработчиков. Я все время использую его для генерации кода. Счетчики производительности , уровень доступа к данным, интерфейсы REST и т. Д. ничего повторяющегося.

Как язык, у него есть свои особенности, но как инструмент он бесценен.

4
ответ дан 1 December 2019 в 17:24
поделиться

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

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

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

3
ответ дан 1 December 2019 в 17:24
поделиться

Я лично считаю, что он очень подходит для определенных типов задач программирования. Для меня в определенных ситуациях намного проще поддерживать форму с помощью XSLT, чем переписывать / перекомпилировать / повторно развертывать изменения кода. Хотя XSLT - не единственный способ добиться этого, я не нашел других решений для этих случаев, которые были бы намного чище и проще.

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

2
ответ дан 1 December 2019 в 17:24
поделиться

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

2
ответ дан 1 December 2019 в 17:24
поделиться
  1. XSLT является функциональным и императивным одновременно. Это сбивает с толку множество людей. у них есть match и для циклов с переменными.
  2. В нем легко написать плохой код. Но если вы будете следовать хорошим шаблонам, вы сможете очень легко делать некоторые действительно изящные вещи.

Посмотрите http://www.worldofwarcraft.com/index.xml и http: // www. wowarmory.com/index.xml, если у вас есть браузер с поддержкой XSLT (подходит FF 3). Они полностью написаны на клиентской стороне XSLT с базовым XML. Это делает очистку этих сайтов ДЕЙСТВИТЕЛЬНО простой и приятной, и они вынуждены хранить данные и представление отдельно. Прекрасным примером являются страницы их персонажей http://www.wowarmory.com/character-achievements.xml?r=Mal%27Ganis&cn=Vosk&gn=Juggernaut

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

Это пример превращения XML в язык программирования. Фу. Я бы хотел, чтобы люди этого не делали. У нас уже есть совершенно хорошие языки программирования, и они справляются с этим намного лучше, чем XML.

0
ответ дан 1 December 2019 в 17:24
поделиться

Я считаю, что люди, которые жалуются на XSLT, злоупотребляют им. Например, я считаю, что использовать его в качестве языка шаблонов HTML для CMS - ужасная идея, если только ваши данные уже не в XML. Эти люди могут жаловаться, что XSLT некрасивый, многословный или что-то еще, но это потому, что они используют его по неправильным причинам.

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

Наша библиотека CMS в основном состоит из таблиц стилей html, которые делают почти все. Наши данные, конечно, изначально являются XML. Некоторые из наших программистов не понимают парадигмы функционального программирования. Ваш первый опыт может привести к тому, что сложные шаблоны будут неправильно использовать итерационные функции XSLT. Первое, что вы должны сказать программисту, это не использовать для каждого оператора и не перемещаться по осям xpath. Если они научатся воздерживаться, они могут научиться понимать концепции шаблонов.

2
ответ дан 1 December 2019 в 17:24
поделиться
Другие вопросы по тегам:

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