powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Можно ли отсортировать в конструкции for-each в динамическом порядке.
25 сообщений из 82, страница 2 из 4
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34429049
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оскорблять не надо!
По поводу убогости xsl языка- как я уже говорил не хочешь не изучай, силой тебя никто не заставлял. Ты спросил у нас совета и еще ворчишь.
Сам xsl непохож на привычный язык программирования. И работать за ним не тоже самое что работать за другими ОО языками. Мне лично понадобилоь 2 месяца чтобы перестроить свою логику с обычного программирования на программирование на xsl.
Тебе дали уже несколько вариантов решения данной проблемы (даже код привели - некоторым даже этого не дают). если не нравятся предложенные решения : ПИШИ САМ и читай спецификацию.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34429376
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaОскорблять не надо!
По поводу убогости xsl языка- как я уже говорил не хочешь не изучай, силой тебя никто не заставлял. Ты спросил у нас совета и еще ворчишь.
Сам xsl непохож на привычный язык программирования. И работать за ним не тоже самое что работать за другими ОО языками. Мне лично понадобилоь 2 месяца чтобы перестроить свою логику с обычного программирования на программирование на xsl.
Тебе дали уже несколько вариантов решения данной проблемы (даже код привели - некоторым даже этого не дают). если не нравятся предложенные решения : ПИШИ САМ и читай спецификацию.

Я просто объясню ситуацию - мне нужно было выбрать некий интерфейс для передачи данных из XML в HTML. На форуме forum.mista.ru мне горячо рекламировали XSLT - какой мол он мощный и т.п.

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

Код приводить было необязательно, все варианты, которые вы привели - это удаление гландов через задницу. Язык манипулирования данными не умеет сортировать в произвольном порядке - это не УБОГО? Ну тогда я не знаю, извените.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34430649
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FixinЯ конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать.ты ничего не понял.

FixinЯ просто объясню ситуацию - мне нужно было выбрать некий интерфейс для передачи данных из XML в HTML.хслт для этого вполне достаточно, но лично тебе, пожалуй, будет удобнее сделать это лиспом

FixinКод приводить было необязательно, все варианты, которые вы привели - это удаление гландов через задницу.подобное решение на скл будет выглядеть ужаснее.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34430944
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы тут выше упоминали про SQL - тоже ведь язык манипулирования данными, однако там тоже нельзя динамическую сортировку сделать. Ай-ай-ай, хотя

FixinВ любом другом языке такая задача решается элементарно.

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

Fixin2. Динамически менять КОД (!!! ужас) программы.
Странно, почему никого не смущает генерация SQL-запросов в run-time ? Может потому что он это позволяет и вы к этому привыкли ?
Или к примеру библиотеки запросов ? Или динамические отчеты ?
Или вон в Java 6 сделали встроенную поддержку скриптовых языков - тоже ведь фактически механизм изменения кода программы уже после компиляции.
JIT-компиляторы туда же.
Возможно вы впервые столкнулись с этим, но реально возможность кастомизации и изменения поведения уже работающей программы - это одна из самых актуальных проблем современных систем, особенно промышленного масштаба. И зачастую это именно "изменение кода системы", пусть и не всегда в классическом понимании данной фразы. Дать клиенту некие штатные средства для этого нередко намного проще и дешевле, чем предусматривать все возможные варианты в коде. А зачастую и выгоднее, т.к. потенциальный клиент при прочих равных выберет более кастомизируемую систему, можете не сомневаться.

Ну да ладно, вернемся к нашим .. сортировкам в общем

FixinЯ конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать.
Вот только сначала подумайте о том, как ваши 100 сортировок повлияют на производительность трансформации. Особенно когда реально ничего сортировать не надо будет ;-)
Если конечно реальные объемы данных будут ограничиваться несколькими килобайтами, то может быть это вам и не критично будет. Хотя если их одновременно несколько сотен или тысяч происходит - масштабы меняются ;) Как всегда нужна как минимум оценка, а лучше провести эксперимент на реальных данных. И спрогнозировать как это будет работать на production-е. Заботиться о производительности лучше заранее - дешевле выйдет.

FixinНо вообще хочу сказать, что это ОЧЕНЬ УБОГО для языка, который декларирует себя, как язык сортировки данных.
Ну не знаю, от вас первого услышал, что xslt это язык сортировки данных
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34431799
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo
хслт для этого вполне достаточно, но лично тебе, пожалуй, будет удобнее сделать это лиспом

подобное решение на скл будет выглядеть ужаснее.

Уважаемый, это вы ничего не поняли. Я не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34431817
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Fixin2. Динамически менять КОД (!!! ужас) программы.
Странно, почему никого не смущает генерация SQL-запросов в run-time ? Может потому что он это позволяет и вы к этому привыкли ?
Или к примеру библиотеки запросов ? Или динамические отчеты ?
Или вон в Java 6 сделали встроенную поддержку скриптовых языков - тоже ведь фактически механизм изменения кода программы уже после компиляции.
JIT-компиляторы туда же.
Возможно вы впервые столкнулись с этим, но реально возможность кастомизации и изменения поведения уже работающей программы - это одна из самых актуальных проблем современных систем, особенно промышленного масштаба. И зачастую это именно "изменение кода системы", пусть и не всегда в классическом понимании данной фразы. Дать клиенту некие штатные средства для этого нередко намного проще и дешевле, чем предусматривать все возможные варианты в коде. А зачастую и выгоднее, т.к. потенциальный клиент при прочих равных выберет более кастомизируемую систему, можете не сомневаться.

Уважаемый, вы что, действительно не видите разницы? Ладно, для военных поясню - код SQL генерируется из другого языка программирования. А вот код XSLT якобы самодостаточен. Подразумевается, что схему менять не нужно под каждый набор данных. Чуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА... Не надо мне тут аналогий с СКЛ, вы бы лучше аналогию с Basic привели.

авторНу да ладно, вернемся к нашим .. сортировкам в общем

FixinЯ конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать.
Вот только сначала подумайте о том, как ваши 100 сортировок повлияют на производительность трансформации. Особенно когда реально ничего сортировать не надо будет ;-)
Если конечно реальные объемы данных будут ограничиваться несколькими килобайтами, то может быть это вам и не критично будет. Хотя если их одновременно несколько сотен или тысяч происходит - масштабы меняются ;) Как всегда нужна как минимум оценка, а лучше провести эксперимент на реальных данных. И спрогнозировать как это будет работать на production-е. Заботиться о производительности лучше заранее - дешевле выйдет.
FixinНо вообще хочу сказать, что это ОЧЕНЬ УБОГО для языка, который декларирует себя, как язык сортировки данных.

Я не понял, к чему вы написали. При чем здесь анализ производительности, уважаемый? Речь идет о том, что в языке манипуляции данных нет элементарной сортировки, как это убого!


авторНу не знаю, от вас первого услышал, что xslt это язык сортировки данных

Не придирайтесь, конечно язык манипуляции данными (имелось ввиду).
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34431848
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FixinЯ не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать.возможности хслт вполне позволяют реализовать любую разумную сортировку и всем нормальным людям этого хватает. Кому не хватает – пишут на лиспе.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34431879
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FixinЧуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА...современные скл-языки тоже вполне самодостаточны.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34431963
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FixinУважаемый, это вы ничего не поняли. Я не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать.
С этим сюда - см. раздел Mailing Lists

FixinУважаемый, вы что, действительно не видите разницы? Ладно, для военных поясню - код SQL генерируется из другого языка программирования. А вот код XSLT якобы самодостаточен. Подразумевается, что схему менять не нужно под каждый набор данных. Чуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА... Не надо мне тут аналогий с СКЛ, вы бы лучше аналогию с Basic привели.
В вашей задаче (xml -> html для веб-отображения) да, динамическая генерация преобразования возможно затруднительна. Но вы о том для чего собрались использовать xslt сообщили в двадцатом по счету посте в топике. До этого никаких ограничений не озвучивали - так что не жалуйтесь что вам предложили такой вариант. Во многих других приложениях реализовать подобный подход во-первых, очень несложно, а во-вторых, более правильно.
XSLT кстати гораздо ближе по сути именно к SQL, а не к Васику. А Васик, ну что Васик, там думаю тоже динамическую сортировку ручками процедурно реализовывать надо будет, разве нет ?
Да и select-ы я запросто могу например в SQL*Plus-е гонять - никакие другие языки, оболочки и т.п. мне не нужны. Это к вопросу о самодостаточности

FixinЯ не понял, к чему вы написали. При чем здесь анализ производительности, уважаемый? Речь идет о том, что в языке манипуляции данных нет элементарной сортировки, как это убого!
Ну элементарные то, как мы видели выше, есть ;-) А вопрос о производительности был к вашему заявлению про "штук 100 сортировок". Именно он должен был у вас первым возникнуть после мысли о 100 сортировках. Производительность это то, про что никогда нельзя забывать при создании многопользовательских приложений.
Да собственно даже если вы пишете только для себя - это еще не причина заставлять себя любимого ждать по н-дцать минут пока отработает ваша же трансформация с сотней сортировок на любом приличном объеме данных.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34432481
dimzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле есть следующие варианты решения:
1) Генерировать код сортировки в рантайме
2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование)
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34432491
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimzonНа самом деле есть следующие варианты решения:
1) Генерировать код сортировки в рантайме
2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование)
да ну?! Если ты такой специалист, не мог бы ты приветси код по обоим пунктам своего возможного решения.
Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34432518
dimzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SuSa
Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt
Ты имеешь ввиду
dimzon
1) Генерировать код сортировки в рантайме
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34432583
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что ты написал, то я и имею в виду.
Ты сказал что можно так. Приведи код. Для того товарища который эту тему открыл. чтоб он больше нам мозги не парил и сам не парился. может его ЭТО уже наконец удовлетворит, а то следить за темой уже надоело.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433506
dimzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SuSaЧто ты написал, то я и имею в виду.
Ты сказал что можно так. Приведи код. Для того товарища который эту тему открыл. чтоб он больше нам мозги не парил и сам не парился. может его ЭТО уже наконец удовлетворит, а то следить за темой уже надоело.
Ну собственно подход уже обсуждался, я только резюмировал
Подразумевается что необходимое количество xsl:sort будет сгенерировано и вставлено в DOM кодом, после чего полученный шаблон будет применён к исходным данным. Т.е. аналогично конструированию order by в sql
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433523
dimzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimzonПодразумевается что необходимое количество xsl:sort будет сгенерировано и вставлено в DOM кодом, после чего полученный шаблон будет применён к исходным данным. Т.е. аналогично конструированию order by в sql
Забыл написать - подобный подход широко применяется в AJAX-приложениях для сортировки данных на клиенте. Сортировать скриптомв лоб слишком медленно поэтому для сортировки не лету генерируется соответствующая XSLT и производится трансформация (Исходные данные в XML)->(Отсортированные данные в XML)
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433567
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo FixinЯ не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать.возможности хслт вполне позволяют реализовать любую разумную сортировку и всем нормальным людям этого хватает. Кому не хватает – пишут на лиспе.

Батенька, не занимайтесь подменой понятий.
Вы XML пример смотрели - куда уж более разумная сортировка.
ПОльзователь сам выбирает в форме, по каким полям сортировать.

Так что фигню вы сказали.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433577
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo FixinЧуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА...современные скл-языки тоже вполне самодостаточны.

Еще раз повторяю - не путайте SQL и XSLT, разницу я вам привел. Уточните, что вы подразумеваете под САМОДОСТАТОЧНЫ?
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433591
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSa dimzonНа самом деле есть следующие варианты решения:
1) Генерировать код сортировки в рантайме
2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование)
да ну?! Если ты такой специалист, не мог бы ты приветси код по обоим пунктам своего возможного решения.
Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt

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

И бьют себя в грудь, доказывая что этого упущения нет.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433604
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimzon SuSaЧто ты написал, то я и имею в виду.
Ты сказал что можно так. Приведи код. Для того товарища который эту тему открыл. чтоб он больше нам мозги не парил и сам не парился. может его ЭТО уже наконец удовлетворит, а то следить за темой уже надоело.
Ну собственно подход уже обсуждался, я только резюмировал
Подразумевается что необходимое количество xsl:sort будет сгенерировано и вставлено в DOM кодом, после чего полученный шаблон будет применён к исходным данным. Т.е. аналогично конструированию order by в sql

Хахаха, удаление гландов через задний проход, тебе не кажется. Нужно будет решать еще куча накладных вопросов - где хранить промещуточный шаблон, например (сейчас я просто передаю в java-script один шаблон). Короче, решение выходит за рамки XSLT и уходит на java-script. То есть по ходу XSLT не по зубам динамическая сортировка? И это язык конвертации данных? очень убого...

Уж проще тогда бабл-сорт написать для списков. Как все криво и безнадежно.... Мдя...
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433778
dimzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Млин, когда человек не понимает то он не понимает.

XSLT это не отдельный язык на котором можно решить ВСЁ . XSLT это одна из вспомогательных технологий при помощи которой решается определённый ряд задач, причём достаточно эффективно. Огромное количество функционала в XSLT решается возможностью подключения объектов-расширений (аналогично тому как в VBScript-е и JavaScript-е можно пользоваться COM-объектами).
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34433923
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FixinВы XML пример смотрели - куда уж более разумная сортировка.
ПОльзователь сам выбирает в форме, по каким полям сортировать.И я показал, как сортировать.
FixinЕще раз повторяю - не путайте SQL и XSLT, разницу я вам привел. Уточните, что вы подразумеваете под САМОДОСТАТОЧНЫ?сравнивать скл и хслт придумал не я, а угадай с трёх раз кто. Самодостаточный – значит, что делать произвольные выборки данных с любой сортировкой на скл можно без всяких внешних языков, внешние языки присутствуют постольку поскольку на них написано главное приложение, которое просто хранит данные в базе.
FixinИ бьют себя в грудь, доказывая что этого упущения нет.да никто и не собирается «освобождать» тебе разум В конце концов здесь форум, а не психоневрологический диспансер. Повторю, не нравится – пиши на лиспе, пхп, питоне, си, – на чём хочешь.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34434055
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimzonМлин, когда человек не понимает то он не понимает.

XSLT это не отдельный язык на котором можно решить ВСЁ . XSLT это одна из вспомогательных технологий при помощи которой решается определённый ряд задач, причём достаточно эффективно. Огромное количество функционала в XSLT решается возможностью подключения объектов-расширений (аналогично тому как в VBScript-е и JavaScript-е можно пользоваться COM-объектами).

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

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

Вам черным по белому говорят - сортировка в XSLT недоделанная и убогая. Сортировка - один из основных механизмов, присущий (domestic) именно XSLT. Покайтесь и согласитесь, что авторы XSLT просто не учли, что сортировка бывает не по фиксированному набору полей.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34434073
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo FixinВы XML пример смотрели - куда уж более разумная сортировка.
ПОльзователь сам выбирает в форме, по каким полям сортировать.И я показал, как сортировать.
FixinЕще раз повторяю - не путайте SQL и XSLT, разницу я вам привел. Уточните, что вы подразумеваете под САМОДОСТАТОЧНЫ?сравнивать скл и хслт придумал не я, а угадай с трёх раз кто. Самодостаточный – значит, что делать произвольные выборки данных с любой сортировкой на скл можно без всяких внешних языков, внешние языки присутствуют постольку поскольку на них написано главное приложение, которое просто хранит данные в базе.
FixinИ бьют себя в грудь, доказывая что этого упущения нет.да никто и не собирается «освобождать» тебе разум В конце концов здесь форум, а не психоневрологический диспансер. Повторю, не нравится – пиши на лиспе, пхп, питоне, си, – на чём хочешь.

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

Можно конечно написать свой аналог xlst:sort (например пузырьковую сортировку), но тогда зачем штатный механизм сортировки нужен.

Короче, господа, отсутствие динамической сортировки в XSLT - это его существенный недостаток, потому что касается именно основного механизма XSLT - сортировки.

А пишу я на XSLT, потому что так указано в тех задании. ;-)
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34434114
Fixin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз уточняю задачу, потому что спрашивали из других источников:

Есть XML файл с неизвестным заранее составом полей.
Нужно выводить таблицу с полями, описанными в fields в порядке, описанном в orders.
Названия полей, их количество и количество полей сортировки заранее неизвестны.
Данные берутся из Outlook, список всех полей заранее составить нельзя, т.к. могут быть поля пользовательские.

Пример исходного XML:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
<root>
<lines>
<line>
<name type="S" sort="Иван Иванович">Иван Иванович</name>
<categories type="S" sort="руководители">руководители</categories>
<entryid type="S">000000009E5D45D68B62C44E8386C937DE30D92684852B00</entryid>
<class type="U"> 40 </class>
</line>
<line>
<name type="S" sort="Елена Прекрасная">Елена Прекрасная</name>
<categories type="S" sort="девушки">девушки</categories>
<entryid type="S">000000009E5D45D68B62C44E8386C937DE30D926A4852B00</entryid>
<class type="U"> 40 </class>
</line>
<line>
<name type="S" sort="Колька-ломщик">Колька-ломщик</name>
<categories type="S" sort="криминал">криминал</categories>
<entryid type="S">000000009E5D45D68B62C44E8386C937DE30D926C4852B00</entryid>
<class type="U"> 40 </class>
</line>
<line>
<name type="S" sort="Кузьмич">Кузьмич</name>
<categories type="S" sort="быт">быт</categories>
<entryid type="S">000000009E5D45D68B62C44E8386C937DE30D926E4852B00</entryid>
<class type="U"> 40 </class>
</line>
<line>
<name type="S" sort="Fixin">Fixin</name>
<categories type="S" sort="я">я</categories>
<entryid type="S">000000009E5D45D68B62C44E8386C937DE30D92604E74200</entryid>
<class type="U"> 40 </class>
</line>
<line>
<name type="S" sort="Журнал Компьютерра">Журнал Компьютерра</name>
<categories type="S" sort="пресса">пресса</categories>
<entryid type="S">000000009E5D45D68B62C44E8386C937DE30D92624E74200</entryid>
<class type="U"> 40 </class>
</line>
</lines>
<fields/>
<info>
<fields>
<_0>
<name type="S">name</name>
<src type="S">FileAs</src>
</_0>
<_1>
<name type="S">categories</name>
<src type="S">Categories</src>
</_1>
</fields>
<orders>
<_0>
<name type="S">categories</name>
<src type="S">Categories</src>
<order type="S">desc</order>
</_0>
<_1>
<name type="S">name</name>
<src type="S">FileAs</src>
<order type="S">asc</order>
</_1>
</orders>

</info>
</root>

Код для преобразования XML в HTML:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr bgcolor="#CCCCCC">

<xsl:for-each select="//info/fields/*">
<td align="center"><strong><xsl:value-of select="name"/></strong></td>
</xsl:for-each>

</tr>

<xsl:for-each select="//lines/line"> <xsl:sort order="ascending" select="categories"/>
<tr bgcolor="#FFEFF0">

<xsl:if test="position() mod 2=0">
<xsl:attribute name="bgcolor">#CCCCCC</xsl:attribute>
</xsl:if>

<xsl:variable name="CurrLine" select="."/>
<xsl:for-each select="//info/fields/*">
<xsl:variable name="CurrField"><xsl:value-of select="name"/></xsl:variable>
<td><xsl:value-of select="$CurrLine/*[local-name( )=$CurrField]"/></td> 
</xsl:for-each>
</tr>
</xsl:for-each>

</table>

</xsl:template>
</xsl:stylesheet>

Преобразование осуществляется скриптом Microsoft Outlook, написанном на VBScript, примерно так:
Код: plaintext
1.
2.
3.
4.
'XML - исходный XML (DOM)
'IEExplorer - объект Internet Explorer

HTML = XML.transformNode(XSL)
IEExplorer.Document. Write (HTML)

Как видно, в скрипте не используется никаких локальных файлов для сохранения XSLT шаблона или HTML файла.

Простейшая задача и на ней XSLT спотыкается и ломает зубы. Предлагают аж динамически генерить XSLT код.
...
Рейтинг: 0 / 0
Можно ли отсортировать в конструкции for-each в динамическом порядке.
    #34434323
dimzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FixinПредлагают аж динамически генерить XSLT код.
И ничего в этом страшного нет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
Option Explicit
' ' Получим исходный XML, _НАПРИМЕР_ из файла
Dim oDOM: Set oDOM = CreateObject("MSXml2.FreeThreadedDomDocument.3.0")
oDOM.async = False
oDOM.load "c:\work\xslSort\fixin.xml"

' ' Сгенерируем текст XSL на лету
Dim sOrderBy: sOrderBy = ""
Dim oNode
For Each oNode In oDOM.DocumentElement.SelectNodes("info/orders/*")
	sOrderBy = sOrderBy & "<xsl:sort select=""" & oNode.SelectSingleNode("name").nodeTypedValue & """"
	If "desc" = oNode.SelectSingleNode("order").nodeTypedValue Then
		sOrderBy = sOrderBy &  " order=""descending"""
	End If
	sOrderBy = sOrderBy & "/>"
Next

Dim sXslt: sXslt = Replace( _
"<?xml version=""1.0"" encoding=""windows-1251"" ?>" & vbNewLine & _ 
"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & vbNewLine & _ 
"	<xsl:template match=""/"">" & vbNewLine & _ 
"		<table border=""1"">" & vbNewLine & _ 
"			<tr bgcolor=""#CCCCCC"">" & vbNewLine & _ 
"				<xsl:for-each select=""root/info/fields/*"">" & vbNewLine & _ 
"					<td align=""center"">" & vbNewLine & _ 
"						<strong>" & vbNewLine & _ 
"							<xsl:value-of select=""name""/>" & vbNewLine & _ 
"						</strong>" & vbNewLine & _ 
"					</td>" & vbNewLine & _ 
"				</xsl:for-each>" & vbNewLine & _ 
"			</tr>" & vbNewLine & _ 
"			" & vbNewLine & _ 
"			<xsl:for-each select=""root/lines/line"">" & vbNewLine & _ 
"				<!-- #SORT_MACRO -->" & vbNewLine & _ 
"				<!-- xsl:sort order=""ascending"" select=""categories""/ -->" & vbNewLine & _ 
"				<tr bgcolor=""#FFEFF0"">" & vbNewLine & _ 
"					<xsl:if test=""position() mod 2=0"">" & vbNewLine & _ 
"						<xsl:attribute name=""bgcolor"">#CCCCCC</xsl:attribute>" & vbNewLine & _ 
"					</xsl:if>" & vbNewLine & _ 
"					<xsl:variable name=""CurrLine"" select="".""/>" & vbNewLine & _ 
"					<xsl:for-each select=""/root/info/fields/*"">" & vbNewLine & _ 
"						<td>" & vbNewLine & _ 
"							<xsl:value-of select=""$CurrLine/*[local-name()=current()/name]""/>" & vbNewLine & _ 
"						</td>" & vbNewLine & _ 
"					</xsl:for-each>" & vbNewLine & _ 
"				</tr>" & vbNewLine & _ 
"			</xsl:for-each>" & vbNewLine & _ 
"		</table>" & vbNewLine & _ 
"	</xsl:template>" & vbNewLine & _ 
"</xsl:stylesheet>", "<!-- #SORT_MACRO -->", sOrderBy)



' ' Загрузим текст XSLT в DOM
Dim oXslt:  Set oXslt = CreateObject("MSXml2.FreeThreadedDomDocument.3.0")
oXslt.async = False
oXslt.loadXml sXslt

' ' Создаем XslTemplateProcessor
Dim oTemplate:	Set oTemplate = CreateObject( "MSXml2.XslTemplate.3.0")
oTemplate.stylesheet = oXslt
Dim oProcessor: Set oProcessor = oTemplate.createProcessor


' ' Выполням преобразование
oProcessor.input = oDOM
oProcessor.transform
Dim sHtml: sHtml = oProcessor.output

''  Теперь делаем с Html-ем что хотим :)
MsgBox sHtml

...
Рейтинг: 0 / 0
25 сообщений из 82, страница 2 из 4
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Можно ли отсортировать в конструкции for-each в динамическом порядке.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]