Когда XSLT является подходящим решением для определения преобразований XML вместо использования языка сценариев, такого как Python? - PullRequest
7 голосов
/ 22 декабря 2009

Когда XSLT является подходящим решением для определения преобразований XML вместо использования языка сценариев, например Python?

Ответы [ 7 ]

3 голосов
/ 22 декабря 2009

Если вы не хотите учитывать такие вещи, как знакомство с разработчиком, я бы сказал, что почти всегда, если у вас есть XSLT 2.0 или, по крайней мере, EXSLT, поскольку XSLT 1.0 довольно ограничивающий (если вам нужны только структурные преобразования, достаточно 1.0, но если вам нужно что-то сделать с контентом, вы хотите держаться подальше от 1.0). XSLT специально разработан для преобразования XML, и я нашел его намного лучше для этой задачи, чем библиотеки XML на языках программирования общего назначения.

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

0 голосов
/ 22 декабря 2009

Если вам или кому-то, с кем вы работаете, более комфортно работать в XSLT или если есть какие-то технические преимущества, которые вы получили бы от использования XSLT (например, интеграции XSLT в Cocoon), используйте XSLT. В противном случае, это почти всегда больше боли, чем вы думаете. Вы будете намного счастливее, используя такие языки, как Python (с lxml), Ruby (с rexml) или даже PHP (с SimpleXML). Вы даже можете связать его с библиотекой шаблонов (например, genshi, с Python), чтобы сделать работу еще проще.

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

0 голосов
/ 22 декабря 2009

Сразу же, если вы преобразуете XML во что-либо, кроме HTML, XML или текста, XSLT - это не то, что вам следует использовать.

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

0 голосов
/ 22 декабря 2009

В отношении производительности некоторые процессоры XSL компилируют преобразование в двоичный файл перед его запуском. Если преобразование будет использоваться много раз, это может быть большим преимуществом в производительности.

0 голосов
/ 22 декабря 2009

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

Также XSLT2.0 действительно необходим для таких операций, как группировка (без него вы должны помнить мюнхенский метод, который является умным, но не интуитивным). Однако не все системы поддерживают XSLT2.0.

0 голосов
/ 22 декабря 2009

Существует много совпадений.

  • Если вы можете указать меньшее количество шаблонных правил, чем требуется для рекурсивного определения того же поведения с кодом, то XSLT имеет смысл.
  • Если человек, поддерживающий правила в долгосрочной перспективе, более удобен и знаком (или имеет лучшие инструменты для поддержки) кода, чем XML / XSLT, тогда лучше использовать код.
  • Если вы хотите иметь возможность поддерживать массовый параллелизм для повышения производительности, то XSLT (или функциональный язык, такой как F #) может быть подходящим вариантом, хотя он может быть практически недоступен сейчас (хотя это должно произойти в будущем). ).
0 голосов
/ 22 декабря 2009

В основном это связано с тем, что XML является иерархической структурой данных в виде дерева.

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

Если ваши XML-данные относительно плоские, а тег <X> означает везде одно и то же, то преимущества не столь очевидны, но если <X> означает одну вещь в корне, а другую вещь внутри <Y> и еще что-то, если оно находится внутри <Z> после <y>, тогда XSLT становится намного проще.

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