|
|
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Т.е. если в переменой $fields у меня задан список полей для сортировки по возрастанию. Я хочу не задавать заранее фиксированный набор order, а формировать список полей сортировки на лету, исходя из значения в $fields. Т.е. например если у меня в fields хранится name, type, то сортировать по name, type, а если name - то только по name. Список полей на этапе написания программы неизвестен. Если такое невозможно, то чего тогда стоит XSLT как язык преобразования, если у него сортировка не работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:43 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
в цикле, до вывода напиши <xsl:sort select="name"/> <xsl:sort select="type"/> Это и будет сортировка сначало по полю name а затем по type Если это у тебя значения атрибутов, то <xsl:sort select="@name"/> <xsl:sort select="@type"/> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 09:25 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaв цикле, до вывода напиши <xsl:sort select="name"/> <xsl:sort select="type"/> Это и будет сортировка сначало по полю name а затем по type Если это у тебя значения атрибутов, то <xsl:sort select="@name"/> <xsl:sort select="@type"/> Товарищ, вы не поняли. Я заранее не знаю количество и набор полей, по которым я буду сортировать таблицу, допустим такой набор задается динамически. И что же, мне для каждого случая писать шаблон, шаблонов не хватит! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 09:29 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
<xsl:sort select="@*[name()=$param1]"/> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 17:01 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo<xsl:sort select="@*[name()=$param1]"/> Это понятно, а если число колонок сортировки заранее неизвестно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 20:29 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Нет, ну если ХСЛТ - язык манипуляции данными, то должна же быть сортировка в произвольном порядке, когда число ключей сортировки заранее неизвестно. Или тогда это убогий язык сортировки. Представьте что в SQL можно было бы сортировать только по одному или только по двум колонкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 10:30 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Не нравиться не изучай... нытье твое уже надоело... этого нет того нет, тут не так , то не сяк... так любой язык разнести можно! Блин. Представьте что в SQL можно было бы сортировать только по одному или только по двум колонкам. Во-первых язык xsl еще достаточно молодой. Во-вторых под него куча различных реализаций. и практически ниодна не соответсвует на 100% спецификации, так что если у тебя неработает что то в одном парсере, возможно заработает в другом. сдесь надо искать что для решения твоей задачи подходит лучше. должна же быть сортировка в произвольном порядке, когда число ключей сортировки заранее неизвестно. Подразумевается что ты обрабатываешь xml документ с известной структурой, количество ключей по скоким ты будешь сортировать таблицу ты задаешь САМ. И одному тебе изветно скоко ключей ты задашь. сортировка в произвольном порядке <xsl:sort select="@name"/> <xsl:sort select="@type"/> или <xsl:sort select="@type"/> <xsl:sort select="@name"/> Сам задал порядок сортировки Или тебе надо сортировать вообще в случайном порядке? <xsl:sort select="@*"/> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 11:07 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaНе нравиться не изучай... нытье твое уже надоело... этого нет того нет, тут не так , то не сяк... так любой язык разнести можно! Блин. Представьте что в SQL можно было бы сортировать только по одному или только по двум колонкам. Во-первых язык xsl еще достаточно молодой. Во-вторых под него куча различных реализаций. и практически ниодна не соответсвует на 100% спецификации, так что если у тебя неработает что то в одном парсере, возможно заработает в другом. сдесь надо искать что для решения твоей задачи подходит лучше. должна же быть сортировка в произвольном порядке, когда число ключей сортировки заранее неизвестно. Подразумевается что ты обрабатываешь xml документ с известной структурой, количество ключей по скоким ты будешь сортировать таблицу ты задаешь САМ. И одному тебе изветно скоко ключей ты задашь. сортировка в произвольном порядке <xsl:sort select="@name"/> <xsl:sort select="@type"/> или <xsl:sort select="@type"/> <xsl:sort select="@name"/> Сам задал порядок сортировки Или тебе надо сортировать вообще в случайном порядке? <xsl:sort select="@*"/> Ничего не предполагается. И ваш пример ничего не объясняет. Предположим есть файл XML в котором хранится таблица Цена, Артикул, Количество, Название. В этом же файле хранится порядок, в котором пользователь хочет видеть эту таблицу (пользователь выбирает порядок в форме (произвольный порядок, замечу)). Например: - Артикул, Товар - Артикул, Цена - Цена - Цена, Артикул, Количество - Цена, Артикул, Количество, Название Я что, должен каждый раз переписывать код, на любой чих пользователя? Я не ною - это базис. Если язык манипуляции данными не умеет сортировать в произвольном порядке, то что это за манипулятор данными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 14:31 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Пока что мне не приходит в голову ничего лучшего, чем написать 20 раз <xsl:sort select="..."/> <xsl:sort select="..."/> И уже по ходу выключать ненужные сортировки. Неужели только так криво? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 14:34 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
У тебя проблема не в сортировке, а в том как написать шаблон так чтобы он сам брал из документа порядок сортировки и таблицу, а азтем сортировал таблицу с введенным порядком. Как вариант сделать форму в которой пользователь будет выбирать поля по которым он хочет сортировать таблицу. Ограничь ему число этих полей. Затем когда получишь xml документ организуй запрос на значения этих полей. К примеру в xml: <sort1>Цена</sort1> <sort2>Кол-во</sort2> <sort3>Вид</sort3> <sort4></sort4> В xsl напиши шаблон по тегам содержащим слово sort. Т.о ты обойдешь их все.А в шаблоне бери значение и из обрабатываемого тега и передовай его в виде значения параметра. Где нить в другом месте где происходит сортировка сортируй таблицу по значению данного параметра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 14:46 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaУ тебя проблема не в сортировке, а в том как написать шаблон так чтобы он сам брал из документа порядок сортировки и таблицу, а азтем сортировал таблицу с введенным порядком. Как вариант сделать форму в которой пользователь будет выбирать поля по которым он хочет сортировать таблицу. Ограничь ему число этих полей. Затем когда получишь xml документ организуй запрос на значения этих полей. К примеру в xml: <sort1>Цена</sort1> <sort2>Кол-во</sort2> <sort3>Вид</sort3> <sort4></sort4> В xsl напиши шаблон по тегам содержащим слово sort. Т.о ты обойдешь их все.А в шаблоне бери значение и из обрабатываемого тега и передовай его в виде значения параметра. Где нить в другом месте где происходит сортировка сортируй таблицу по значению данного параметра я именно так и делаю. Как мен отсортировать таблицу так, чтобы порядок сортировки был таким: Цена, Кол-во, Вид А если я заранее не знаю количество полей... Вопрос остается прежним! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 21:41 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Понимаешь, суса, ты зациклился на частном примере, а я не знаю заранее количество колонок в таблице и порядок сортировки - их мне передают в XML файле. И что? Неужели язык манипуляции данных не может отсортировать данные в нужном мне порядке?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 21:54 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinПонимаешь, суса, Хоть бы с большой буквы написал ты зациклился на частном примере Если ты мог заметить я стараюсь либо конкретно отвечать на вопрос(если структура кода запутана), либо предлогаю такой вариант, где заменив слова проверки получается универсальный шаблон для всех задач такого типа. я не знаю заранее количество колонок в таблице и порядок сортировки - их мне передают в XML файле. Сам хоть примерную структуру xml представляешь? к примеру:xml: <root> <tabl> <stolb atrib='столбец1'> <jacheyka>book1</jacheyka> <jacheyka>book2</jacheyka> <jacheyka>book3</jacheyka> </stolb> <stolb atrib='столбец2'> <jacheyka>avtor1</jacheyka> .. </stolb> <stolb atrib='столбец3'> <jacheyka>name1</jacheyka> .. </stolb> </tabl> <sort1>столбец3</sort1> <sort2></sort2> </root> Примерный алгоритм в xsl: Обойти все можно примерно так, пишу словами в код переводи сам: 1. Проверяешь есть ли у тебя вообще таблица -если есть посчитать скоко в ней столбцов -(кол-во сортировок не может быть больше количества столбцов), перейти к пункту 2 2. Поиск по xml тегов с сортировкой, проверка на количество заполненный тегов сортировки, и соответсвии имен в них с именами столбцов которые надо сортировать. Вызвать шаблон сортировки (в качестве параметра передашь по какому столбцу сортировать) 3. Шаблон сортировки <xsl:param name="param1"/> <xsl:for-each select="$param1"> <xsl:sort select="$param1"/> .. либо сохраняешь либо выводишь либо запоминаешь </xsl:for-each> вот и все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 09:18 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSa FixinПонимаешь, суса, Хоть бы с большой буквы написал ты зациклился на частном примере Если ты мог заметить я стараюсь либо конкретно отвечать на вопрос(если структура кода запутана), либо предлогаю такой вариант, где заменив слова проверки получается универсальный шаблон для всех задач такого типа. я не знаю заранее количество колонок в таблице и порядок сортировки - их мне передают в XML файле. Сам хоть примерную структуру xml представляешь? к примеру:xml: <root> <tabl> <stolb atrib='столбец1'> <jacheyka>book1</jacheyka> <jacheyka>book2</jacheyka> <jacheyka>book3</jacheyka> </stolb> <stolb atrib='столбец2'> <jacheyka>avtor1</jacheyka> .. </stolb> <stolb atrib='столбец3'> <jacheyka>name1</jacheyka> .. </stolb> </tabl> <sort1>столбец3</sort1> <sort2></sort2> </root> Примерный алгоритм в xsl: Обойти все можно примерно так, пишу словами в код переводи сам: 1. Проверяешь есть ли у тебя вообще таблица -если есть посчитать скоко в ней столбцов -(кол-во сортировок не может быть больше количества столбцов), перейти к пункту 2 2. Поиск по xml тегов с сортировкой, проверка на количество заполненный тегов сортировки, и соответсвии имен в них с именами столбцов которые надо сортировать. Вызвать шаблон сортировки (в качестве параметра передашь по какому столбцу сортировать) 3. Шаблон сортировки <xsl:param name="param1"/> <xsl:for-each select="$param1"> <xsl:sort select="$param1"/> .. либо сохраняешь либо выводишь либо запоминаешь </xsl:for-each> вот и все Суса, ну как ты не понимаешь. Вот тебе пример. Мне нужно отсортировать например так Наименование Возр, Количество Возр. Есть таблица Вася 10 Петя 23 Петя 14 Вася 14 Саша 12 Саша 13 Сортирую сначала по наименованию, получаю: Вася 10 Вася 14 Петя 23 Петя 14 Саша 12 Саша 13 Затем сортирую по количеству, получаю: Вася 10 Саша 12 Саша 13 Вася 14 Петя 14 Петя 23 И что, это результат? Мне нужно сортировать не последовательно по нескольким столбцам, а СРАЗУ по нескольким столбцам, понимаешь? Т.е. результат должен быть: Вася 10 Вася 14 Петя 14 Петя 23 Саша 12 Саша 13 А твой пример умеет сортировать только по одному столбцу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 10:48 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Код покажи... только чур те куски которые как раз за сортировку отвечают, если у тебя там еще че то невтему, это не надо, и xml с этой таблицей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 11:08 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
И еще sort вроде позволяет проводить операции над множествами, т.е <xsl:sort select="Наименование Возр and Количество Возр"/> если такое прокатит то можно и так <xsl:param name="param1" select="Наименование Возр"/> <xsl:param name="param2" select="Количество Возр"/> <xsl:sort select="$param1 and $param2"/> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 11:14 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinПредставьте что в SQL можно было бы сортировать только по одному или только по двум колонкам.очень интересно посмотреть, как SQL может сортировать по неизвестному количеству полей. Покажи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 11:55 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo FixinПредставьте что в SQL можно было бы сортировать только по одному или только по двум колонкам.очень интересно посмотреть, как SQL может сортировать по неизвестному количеству полей. Покажи? Динамическое построение запроса в ран-тайме. Кстати, динамически формировать можно не только select-ы - xslt это тоже всего лишь текст ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 19:22 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaИ еще sort вроде позволяет проводить операции над множествами, т.е <xsl:sort select="Наименование Возр and Количество Возр"/> если такое прокатит то можно и так <xsl:param name="param1" select="Наименование Возр"/> <xsl:param name="param2" select="Количество Возр"/> <xsl:sort select="$param1 and $param2"/> Смущает это вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 20:34 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
TiG maXmo FixinПредставьте что в SQL можно было бы сортировать только по одному или только по двум колонкам.очень интересно посмотреть, как SQL может сортировать по неизвестному количеству полей. Покажи? Динамическое построение запроса в ран-тайме. Кстати, динамически формировать можно не только select-ы - xslt это тоже всего лишь текст ;-) Вернемся к сабжу. Неужели в XSLT нет возможности отсортировать выборку в произвольном порядке, или нужно на этапе написания кода заранее предусмотреть все варианты сортировки (что нереально порой). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 20:35 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinВернемся к сабжу. Неужели в XSLT нет возможности отсортировать выборку в произвольном порядке, или нужно на этапе написания кода заранее предусмотреть все варианты сортировки (что нереально порой).думаю в хслт возможностей для сортировки больше, чем в скл. Но предупреждаю! Искусственного интеллекта там НЕТ !!! Даже если тебе этого очень хочется. Он не сможет угадать твои мысли и самостоятельно сообразить, как сортировать. Ты должен дать чёткий алгоритм сортировки. Информационными технологиями можно реализовывать только чётко сформулированные алгоритмы. Ты не можешь заставить компьютер решить задачу «чтобы всё было кучеряво». Такие задачи решает только человек. Заруби себе это на носу. Давай алгоритм и будем смотреть, как его сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2007, 11:35 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo FixinВернемся к сабжу. Неужели в XSLT нет возможности отсортировать выборку в произвольном порядке, или нужно на этапе написания кода заранее предусмотреть все варианты сортировки (что нереально порой).думаю в хслт возможностей для сортировки больше, чем в скл. Но предупреждаю! Искусственного интеллекта там НЕТ !!! Даже если тебе этого очень хочется. Он не сможет угадать твои мысли и самостоятельно сообразить, как сортировать. Ты должен дать чёткий алгоритм сортировки. Информационными технологиями можно реализовывать только чётко сформулированные алгоритмы. Ты не можешь заставить компьютер решить задачу «чтобы всё было кучеряво». Такие задачи решает только человек. Заруби себе это на носу. Давай алгоритм и будем смотреть, как его сделать. Все это патетика, при всем уважении к автору. Потому что речь идет о конкретной задаче. И вот эта конкретная задача! Есть XML файл с неизвестным заранее составом полей. Нужно выводить таблицу с полями, описанными в fields в порядке, описанном в orders. Названия полей, их количество и количество полей сортировки заранее неизвестны. Данные берутся из Outlook, список всех полей заранее составить нельзя, т.к. могут быть поля пользовательские. Пример: <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> </fields> </info> </root> То бишь вывести таблицу с полями name, categories, в порядке categories desc, names asc. Т.е. сортировка сразу по двум ключам. Пожалуйста, ваши идеи. Вывод таблицы реализован здесь: http://www.sql.ru/forum/actualthread.aspx?tid=405106 Непонятки с сортировкой!!! Ведь я не знаю заранее, как нужно сортировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 22:24 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Не зашоривайся на одном единственном варианте. Задачи с неполностью определенными на этапе кодирования условиями (как у тебя) решаются обычно другими путями, чем полностью детерминированные (например когда есть maXmo чёткий алгоритм сортировки и т.п.) Твоя задача это 100%-ный аналог проблемы "сортировка данных в запросе по неизвестному количеству полей". Для набора данных с небольшим фиксированным кол-вом полей и допустимым ограничением "сортируем не более чем по N атрибутам" (сразу замечу в подавляющем (!) большинстве случаев такое ограничение более чем оправдано, т.к. сортировка набора по всем полям по большому счету просто бессмысленна) - в ORDER BY указываем N вычислимых выражений (CASE-ов или DECODE-ов для Oracle-а скажем), в зависимости от заданных параметров получаем сотрировку по тем или иным атрибутам. Но если честно это извращение Ты кстати насколько я понял хочешь именно по этому пути пойти ;-) Есть еще один вариант - сортировка по одному составному атрибуту, обеспечивающему эквивалентную требуемой сотрировку. Такой атрибут включает в себя нормализованные значения всех атрибутов, по которым необходимо сортировать. Ну типа вместо сортировки по A, B, C сортируем по композитному строковому полю <нормализованное_A><нормализованное_B><нормализованное_C>. Правда это хорошо работает только если есть возможность предварительной процедурной обработки исходного набора (композитное поле надо еще сформировать - динамически в run-time-е ;-)) и если не требуется скажем сортировать в обратном порядке или сортировать действительные числа с дробной частью или строки очень большой длины, которые в сумме выходят за максимальную длину. Кстати таким же образом можно реализовать динамическую группировку данных - подобный способ больше подходит именно для этой задачи. Ну и наконец .... самый правильный вариант (и единственный работающий во ВСЕХ случаях) это TiGДинамическое построение запроса в ран-тайме. Кстати, динамически формировать можно не только select-ы - xslt это тоже всего лишь текст ;-) Решаемая проблема - это как раз тот случай когда построение запроса в run-time-е и динамический SQL просто диктуется самими условиями задачи ;-) А кроме того еще и выливается в более простой и понятный код, что для дальнейшего сопровождения является первоочередным условием. PS И не забывай, что самый простой способ решения, обычно и самый правильный ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 11:17 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 12:46 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
TiGНе зашоривайся на одном единственном варианте. Задачи с неполностью определенными на этапе кодирования условиями (как у тебя) решаются обычно другими путями, чем полностью детерминированные ... PS И не забывай, что самый простой способ решения, обычно и самый правильный ;-) Господи боже мой, ну что же вы за программисты? Если человек хочет бегать, вы начнете ему объяснять с пеной у рта, что бегать - это плохо. В любом другом языке такая задача решается элементарно. А XSLT - это язык манипулирования данными и ничего лучше нет, чем: 1. Ограничить число сортировок. 2. Динамически менять КОД (!!! ужас) программы. 3. Извращаться, вычисляя еще и составной ключ. Я конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать. Но вообще хочу сказать, что это ОЧЕНЬ УБОГО для языка, который декларирует себя, как язык сортировки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 20:12 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Оскорблять не надо! По поводу убогости xsl языка- как я уже говорил не хочешь не изучай, силой тебя никто не заставлял. Ты спросил у нас совета и еще ворчишь. Сам xsl непохож на привычный язык программирования. И работать за ним не тоже самое что работать за другими ОО языками. Мне лично понадобилоь 2 месяца чтобы перестроить свою логику с обычного программирования на программирование на xsl. Тебе дали уже несколько вариантов решения данной проблемы (даже код привели - некоторым даже этого не дают). если не нравятся предложенные решения : ПИШИ САМ и читай спецификацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 11:00 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaОскорблять не надо! По поводу убогости xsl языка- как я уже говорил не хочешь не изучай, силой тебя никто не заставлял. Ты спросил у нас совета и еще ворчишь. Сам xsl непохож на привычный язык программирования. И работать за ним не тоже самое что работать за другими ОО языками. Мне лично понадобилоь 2 месяца чтобы перестроить свою логику с обычного программирования на программирование на xsl. Тебе дали уже несколько вариантов решения данной проблемы (даже код привели - некоторым даже этого не дают). если не нравятся предложенные решения : ПИШИ САМ и читай спецификацию. Я просто объясню ситуацию - мне нужно было выбрать некий интерфейс для передачи данных из XML в HTML. На форуме forum.mista.ru мне горячо рекламировали XSLT - какой мол он мощный и т.п. Мне не нужно было 2 месяца, потому что в институте была неплохая практика работы с Лиспом. Я не наезжаю на то, что в XSLT нет присваивания, это особенность функционального языка. Но неумение манипулировать с данными (сортировка) для языка обработки данных - это убожество. Код приводить было необязательно, все варианты, которые вы привели - это удаление гландов через задницу. Язык манипулирования данными не умеет сортировать в произвольном порядке - это не УБОГО? Ну тогда я не знаю, извените. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 19:57 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinЯ конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать.ты ничего не понял. FixinЯ просто объясню ситуацию - мне нужно было выбрать некий интерфейс для передачи данных из XML в HTML.хслт для этого вполне достаточно, но лично тебе, пожалуй, будет удобнее сделать это лиспом FixinКод приводить было необязательно, все варианты, которые вы привели - это удаление гландов через задницу.подобное решение на скл будет выглядеть ужаснее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 11:08 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Вы тут выше упоминали про SQL - тоже ведь язык манипулирования данными, однако там тоже нельзя динамическую сортировку сделать. Ай-ай-ай, хотя FixinВ любом другом языке такая задача решается элементарно. И здесь тоже решается, только в разных языках - разными средствами. И так же, у любого инструмента есть ограничения - у разных инструментов они разные. Fixin2. Динамически менять КОД (!!! ужас) программы. Странно, почему никого не смущает генерация SQL-запросов в run-time ? Может потому что он это позволяет и вы к этому привыкли ? Или к примеру библиотеки запросов ? Или динамические отчеты ? Или вон в Java 6 сделали встроенную поддержку скриптовых языков - тоже ведь фактически механизм изменения кода программы уже после компиляции. JIT-компиляторы туда же. Возможно вы впервые столкнулись с этим, но реально возможность кастомизации и изменения поведения уже работающей программы - это одна из самых актуальных проблем современных систем, особенно промышленного масштаба. И зачастую это именно "изменение кода системы", пусть и не всегда в классическом понимании данной фразы. Дать клиенту некие штатные средства для этого нередко намного проще и дешевле, чем предусматривать все возможные варианты в коде. А зачастую и выгоднее, т.к. потенциальный клиент при прочих равных выберет более кастомизируемую систему, можете не сомневаться. Ну да ладно, вернемся к нашим .. сортировкам в общем FixinЯ конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать. Вот только сначала подумайте о том, как ваши 100 сортировок повлияют на производительность трансформации. Особенно когда реально ничего сортировать не надо будет ;-) Если конечно реальные объемы данных будут ограничиваться несколькими килобайтами, то может быть это вам и не критично будет. Хотя если их одновременно несколько сотен или тысяч происходит - масштабы меняются ;) Как всегда нужна как минимум оценка, а лучше провести эксперимент на реальных данных. И спрогнозировать как это будет работать на production-е. Заботиться о производительности лучше заранее - дешевле выйдет. FixinНо вообще хочу сказать, что это ОЧЕНЬ УБОГО для языка, который декларирует себя, как язык сортировки данных. Ну не знаю, от вас первого услышал, что xslt это язык сортировки данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 12:35 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo хслт для этого вполне достаточно, но лично тебе, пожалуй, будет удобнее сделать это лиспом подобное решение на скл будет выглядеть ужаснее. Уважаемый, это вы ничего не поняли. Я не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 16:38 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
автор Fixin2. Динамически менять КОД (!!! ужас) программы. Странно, почему никого не смущает генерация SQL-запросов в run-time ? Может потому что он это позволяет и вы к этому привыкли ? Или к примеру библиотеки запросов ? Или динамические отчеты ? Или вон в Java 6 сделали встроенную поддержку скриптовых языков - тоже ведь фактически механизм изменения кода программы уже после компиляции. JIT-компиляторы туда же. Возможно вы впервые столкнулись с этим, но реально возможность кастомизации и изменения поведения уже работающей программы - это одна из самых актуальных проблем современных систем, особенно промышленного масштаба. И зачастую это именно "изменение кода системы", пусть и не всегда в классическом понимании данной фразы. Дать клиенту некие штатные средства для этого нередко намного проще и дешевле, чем предусматривать все возможные варианты в коде. А зачастую и выгоднее, т.к. потенциальный клиент при прочих равных выберет более кастомизируемую систему, можете не сомневаться. Уважаемый, вы что, действительно не видите разницы? Ладно, для военных поясню - код SQL генерируется из другого языка программирования. А вот код XSLT якобы самодостаточен. Подразумевается, что схему менять не нужно под каждый набор данных. Чуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА... Не надо мне тут аналогий с СКЛ, вы бы лучше аналогию с Basic привели. авторНу да ладно, вернемся к нашим .. сортировкам в общем FixinЯ конечно выберу вариант 1, поставив штук 100 сортировок, откуда я знаю, по какому признаку захочет пользователь сортировать. Вот только сначала подумайте о том, как ваши 100 сортировок повлияют на производительность трансформации. Особенно когда реально ничего сортировать не надо будет ;-) Если конечно реальные объемы данных будут ограничиваться несколькими килобайтами, то может быть это вам и не критично будет. Хотя если их одновременно несколько сотен или тысяч происходит - масштабы меняются ;) Как всегда нужна как минимум оценка, а лучше провести эксперимент на реальных данных. И спрогнозировать как это будет работать на production-е. Заботиться о производительности лучше заранее - дешевле выйдет. FixinНо вообще хочу сказать, что это ОЧЕНЬ УБОГО для языка, который декларирует себя, как язык сортировки данных. Я не понял, к чему вы написали. При чем здесь анализ производительности, уважаемый? Речь идет о том, что в языке манипуляции данных нет элементарной сортировки, как это убого! авторНу не знаю, от вас первого услышал, что xslt это язык сортировки данных Не придирайтесь, конечно язык манипуляции данными (имелось ввиду). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 16:42 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinЯ не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать.возможности хслт вполне позволяют реализовать любую разумную сортировку и всем нормальным людям этого хватает. Кому не хватает – пишут на лиспе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 16:51 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinЧуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА...современные скл-языки тоже вполне самодостаточны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 16:56 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinУважаемый, это вы ничего не поняли. Я не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать. С этим сюда - см. раздел Mailing Lists FixinУважаемый, вы что, действительно не видите разницы? Ладно, для военных поясню - код SQL генерируется из другого языка программирования. А вот код XSLT якобы самодостаточен. Подразумевается, что схему менять не нужно под каждый набор данных. Чуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА... Не надо мне тут аналогий с СКЛ, вы бы лучше аналогию с Basic привели. В вашей задаче (xml -> html для веб-отображения) да, динамическая генерация преобразования возможно затруднительна. Но вы о том для чего собрались использовать xslt сообщили в двадцатом по счету посте в топике. До этого никаких ограничений не озвучивали - так что не жалуйтесь что вам предложили такой вариант. Во многих других приложениях реализовать подобный подход во-первых, очень несложно, а во-вторых, более правильно. XSLT кстати гораздо ближе по сути именно к SQL, а не к Васику. А Васик, ну что Васик, там думаю тоже динамическую сортировку ручками процедурно реализовывать надо будет, разве нет ? Да и select-ы я запросто могу например в SQL*Plus-е гонять - никакие другие языки, оболочки и т.п. мне не нужны. Это к вопросу о самодостаточности FixinЯ не понял, к чему вы написали. При чем здесь анализ производительности, уважаемый? Речь идет о том, что в языке манипуляции данных нет элементарной сортировки, как это убого! Ну элементарные то, как мы видели выше, есть ;-) А вопрос о производительности был к вашему заявлению про "штук 100 сортировок". Именно он должен был у вас первым возникнуть после мысли о 100 сортировках. Производительность это то, про что никогда нельзя забывать при создании многопользовательских приложений. Да собственно даже если вы пишете только для себя - это еще не причина заставлять себя любимого ждать по н-дцать минут пока отработает ваша же трансформация с сотней сортировок на любом приличном объеме данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 17:14 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
На самом деле есть следующие варианты решения: 1) Генерировать код сортировки в рантайме 2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 19:53 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzonНа самом деле есть следующие варианты решения: 1) Генерировать код сортировки в рантайме 2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование) да ну?! Если ты такой специалист, не мог бы ты приветси код по обоим пунктам своего возможного решения. Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 19:58 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSa Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt Ты имеешь ввиду dimzon 1) Генерировать код сортировки в рантайме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 20:17 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Что ты написал, то я и имею в виду. Ты сказал что можно так. Приведи код. Для того товарища который эту тему открыл. чтоб он больше нам мозги не парил и сам не парился. может его ЭТО уже наконец удовлетворит, а то следить за темой уже надоело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 21:34 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaЧто ты написал, то я и имею в виду. Ты сказал что можно так. Приведи код. Для того товарища который эту тему открыл. чтоб он больше нам мозги не парил и сам не парился. может его ЭТО уже наконец удовлетворит, а то следить за темой уже надоело. Ну собственно подход уже обсуждался, я только резюмировал Подразумевается что необходимое количество xsl:sort будет сгенерировано и вставлено в DOM кодом, после чего полученный шаблон будет применён к исходным данным. Т.е. аналогично конструированию order by в sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 11:50 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzonПодразумевается что необходимое количество xsl:sort будет сгенерировано и вставлено в DOM кодом, после чего полученный шаблон будет применён к исходным данным. Т.е. аналогично конструированию order by в sql Забыл написать - подобный подход широко применяется в AJAX-приложениях для сортировки данных на клиенте. Сортировать скриптомв лоб слишком медленно поэтому для сортировки не лету генерируется соответствующая XSLT и производится трансформация (Исходные данные в XML)->(Отсортированные данные в XML) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 11:53 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo FixinЯ не прошу от XSLT выкрунтасов, я не понимаю, почему динамической сортировки НЕТ в языке и ее невозможно без извращений реализовать.возможности хслт вполне позволяют реализовать любую разумную сортировку и всем нормальным людям этого хватает. Кому не хватает – пишут на лиспе. Батенька, не занимайтесь подменой понятий. Вы XML пример смотрели - куда уж более разумная сортировка. ПОльзователь сам выбирает в форме, по каким полям сортировать. Так что фигню вы сказали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 12:01 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo FixinЧуствуете разницу. Запрос SQL генерируется из ДРУГОГО ЯЗЫКА...современные скл-языки тоже вполне самодостаточны. Еще раз повторяю - не путайте SQL и XSLT, разницу я вам привел. Уточните, что вы подразумеваете под САМОДОСТАТОЧНЫ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 12:03 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSa dimzonНа самом деле есть следующие варианты решения: 1) Генерировать код сортировки в рантайме 2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование) да ну?! Если ты такой специалист, не мог бы ты приветси код по обоим пунктам своего возможного решения. Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt Во-во, Господа XSLTисты не хотят видеть очевидного упущения в языке XSLT - авторы подумали о сортировке, но забыли, что сортировка может производиться по произвольному набору полей. И бьют себя в грудь, доказывая что этого упущения нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 12:05 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon SuSaЧто ты написал, то я и имею в виду. Ты сказал что можно так. Приведи код. Для того товарища который эту тему открыл. чтоб он больше нам мозги не парил и сам не парился. может его ЭТО уже наконец удовлетворит, а то следить за темой уже надоело. Ну собственно подход уже обсуждался, я только резюмировал Подразумевается что необходимое количество xsl:sort будет сгенерировано и вставлено в DOM кодом, после чего полученный шаблон будет применён к исходным данным. Т.е. аналогично конструированию order by в sql Хахаха, удаление гландов через задний проход, тебе не кажется. Нужно будет решать еще куча накладных вопросов - где хранить промещуточный шаблон, например (сейчас я просто передаю в java-script один шаблон). Короче, решение выходит за рамки XSLT и уходит на java-script. То есть по ходу XSLT не по зубам динамическая сортировка? И это язык конвертации данных? очень убого... Уж проще тогда бабл-сорт написать для списков. Как все криво и безнадежно.... Мдя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 12:08 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Млин, когда человек не понимает то он не понимает. XSLT это не отдельный язык на котором можно решить ВСЁ . XSLT это одна из вспомогательных технологий при помощи которой решается определённый ряд задач, причём достаточно эффективно. Огромное количество функционала в XSLT решается возможностью подключения объектов-расширений (аналогично тому как в VBScript-е и JavaScript-е можно пользоваться COM-объектами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 12:38 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinВы XML пример смотрели - куда уж более разумная сортировка. ПОльзователь сам выбирает в форме, по каким полям сортировать.И я показал, как сортировать. FixinЕще раз повторяю - не путайте SQL и XSLT, разницу я вам привел. Уточните, что вы подразумеваете под САМОДОСТАТОЧНЫ?сравнивать скл и хслт придумал не я, а угадай с трёх раз кто. Самодостаточный – значит, что делать произвольные выборки данных с любой сортировкой на скл можно без всяких внешних языков, внешние языки присутствуют постольку поскольку на них написано главное приложение, которое просто хранит данные в базе. FixinИ бьют себя в грудь, доказывая что этого упущения нет.да никто и не собирается «освобождать» тебе разум В конце концов здесь форум, а не психоневрологический диспансер. Повторю, не нравится – пиши на лиспе, пхп, питоне, си, – на чём хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 13:03 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzonМлин, когда человек не понимает то он не понимает. XSLT это не отдельный язык на котором можно решить ВСЁ . XSLT это одна из вспомогательных технологий при помощи которой решается определённый ряд задач, причём достаточно эффективно. Огромное количество функционала в XSLT решается возможностью подключения объектов-расширений (аналогично тому как в VBScript-е и JavaScript-е можно пользоваться COM-объектами). Димзон, не разводите демагогию. Сортировка - это не та область, где нужно подключать дополнительные средства. Как раз это один из китов, на котором стоит XSLT. Если бы я сказал - в XSLT нельзя подключить сканнер штрих-кодов, вы бы могли так понтоваться. Вам черным по белому говорят - сортировка в XSLT недоделанная и убогая. Сортировка - один из основных механизмов, присущий (domestic) именно XSLT. Покайтесь и согласитесь, что авторы XSLT просто не учли, что сортировка бывает не по фиксированному набору полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 13:31 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
maXmo FixinВы XML пример смотрели - куда уж более разумная сортировка. ПОльзователь сам выбирает в форме, по каким полям сортировать.И я показал, как сортировать. FixinЕще раз повторяю - не путайте SQL и XSLT, разницу я вам привел. Уточните, что вы подразумеваете под САМОДОСТАТОЧНЫ?сравнивать скл и хслт придумал не я, а угадай с трёх раз кто. Самодостаточный – значит, что делать произвольные выборки данных с любой сортировкой на скл можно без всяких внешних языков, внешние языки присутствуют постольку поскольку на них написано главное приложение, которое просто хранит данные в базе. FixinИ бьют себя в грудь, доказывая что этого упущения нет.да никто и не собирается «освобождать» тебе разум В конце концов здесь форум, а не психоневрологический диспансер. Повторю, не нравится – пиши на лиспе, пхп, питоне, си, – на чём хочешь. Некривого и реально нормального способа такой сортировки в этой ветке я еще не встречал. Я привел пример примитивнейшей задачи, для которой нет решения в языке, хотя механизмы для этого все есть в языке. Т.е. это упущение языка. Можно конечно написать свой аналог xlst:sort (например пузырьковую сортировку), но тогда зачем штатный механизм сортировки нужен. Короче, господа, отсутствие динамической сортировки в XSLT - это его существенный недостаток, потому что касается именно основного механизма XSLT - сортировки. А пишу я на XSLT, потому что так указано в тех задании. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 13:35 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Еще раз уточняю задачу, потому что спрашивали из других источников: Есть 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. Код для преобразования 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. Преобразование осуществляется скриптом Microsoft Outlook, написанном на VBScript, примерно так: Код: plaintext 1. 2. 3. 4. Как видно, в скрипте не используется никаких локальных файлов для сохранения XSLT шаблона или HTML файла. Простейшая задача и на ней XSLT спотыкается и ломает зубы. Предлагают аж динамически генерить XSLT код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 13:45 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:32 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinЯ привел пример примитивнейшей задачи, для которой нет решения в языке, хотя механизмы для этого все есть в языке . Т.е. это упущение языка. То есть практически ты сказал. Это сделать можно, токо меня ломает, а вы додуматься не в состоянии как это сделать. Fixin Можно конечно написать свой аналог xlst:sort (например пузырьковую сортировку), но тогда зачем штатный механизм сортировки нужен. штатный механизм сортировки нужен для тех кто так не извращается и писать ему в лом. З.Ы. перенеси вопрос в новый топик, а то этот уже больно по трафику бъет. и вынеси уже те вопросы которые обсуждаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:35 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSa dimzonНа самом деле есть следующие варианты решения: 1) Генерировать код сортировки в рантайме 2) Использовать вспомогательную логику через xsl-расширения (зависит от того каким XSL-процессором происходит преобразование) да ну?! Если ты такой специалист, не мог бы ты приветси код по обоим пунктам своего возможного решения. Очень охото посмотреть как можно осуществить "сортировкуи в рантайме" на xslt Второй способ (первый способ тут) Код: plaintext Ну что, вопрос исчерпан? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 20:06 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon ... Код с привлечением VBS ... Хахаха, ты этим кодом еще раз доказал убогость XSLT. XSLT, мощный язык работы с данными и сам не может выполнить банальную сортировку. Голимое решение. Проще было бы на XSLT бабл-сорт написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 20:36 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Fixin dimzon ... Код с привлечением VBS ... Хахаха, ты этим кодом еще раз доказал убогость XSLT. XSLT, мощный язык работы с данными и сам не может выполнить банальную сортировку. Во первых читай каммент по поводу использования extension-объектов. SQL, мощнейший работы с данными тоже не может выполнить "банальную" сортировку сам. Причина в том что эта сортировка не банальна. Fixin Голимое решение. Уж кто-бы говорил, особенно в свете последующего: Fixin Проще было бы на XSLT бабл-сорт написать. Вот тут заявляю лично тебе 2 вещи : А слабо взять и написать и с нами поделиться? А даже если напишешь работать будет в РАЗЫ если не ДЕСЯТКИ раз медленнее моего решения, особенно на больших (100 и более строк) объемах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:13 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Ладно, FIXIN, понтуешься ты много, надо посмотреть чего ты на практике стоишь Итак ты утверждаешь что XSLT-кривой язык . Если да то ДОКАЖИ это не просто найдя в XSLT изъян а приведи пример кода выполняющего те-же самые операции (такое-же преобразование из XML в HTML) на другом языке. При этом мы сравним a) Объем кода b) Простоту сопровождения (насколько сложно внесение изменений в дизайн) c) Читаемость d) Производительность Ты утверждаешь что показанные тебе решения твоей проблемы "голимые" Если да то ДОКАЖИ это приведя другое РАБОТАЮЩЕЕ решение При этом мы сравним a) Объем кода b) Простоту сопровождения (насколько сложно внесение изменений в дизайн) c) Читаемость d) Производительность Ну что, принимаешь вызов или слабо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:23 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzonЛадно, FIXIN, понтуешься ты много, надо посмотреть чего ты на практике стоишь Итак ты утверждаешь что XSLT-кривой язык . Если да то ДОКАЖИ это не просто найдя в XSLT изъян а приведи пример кода выполняющего те-же самые операции (такое-же преобразование из XML в HTML) на другом языке. При этом мы сравним a) Объем кода b) Простоту сопровождения (насколько сложно внесение изменений в дизайн) c) Читаемость d) Производительность Ты утверждаешь что показанные тебе решения твоей проблемы "голимые" Если да то ДОКАЖИ это приведя другое РАБОТАЮЩЕЕ решение При этом мы сравним a) Объем кода b) Простоту сопровождения (насколько сложно внесение изменений в дизайн) c) Читаемость d) Производительность Ну что, принимаешь вызов или слабо? Хахаха... Вот тебе пример из 1с 80. Как отвечающая сторона я имею право выбора языка. Как видишь, никаких внешних средств не использовано, сопровождение - раз плюнуть. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Как видишь, в нормальных языках, где реально работают с данными, не забыли про динамическую сортировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:39 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSa FixinЯ привел пример примитивнейшей задачи, для которой нет решения в языке, хотя механизмы для этого все есть в языке . Т.е. это упущение языка. То есть практически ты сказал. Это сделать можно, токо меня ломает, а вы додуматься не в состоянии как это сделать. Fixin Можно конечно написать свой аналог xlst:sort (например пузырьковую сортировку), но тогда зачем штатный механизм сортировки нужен. штатный механизм сортировки нужен для тех кто так не извращается и писать ему в лом. З.Ы. перенеси вопрос в новый топик, а то этот уже больно по трафику бъет. и вынеси уже те вопросы которые обсуждаются Читай только последнюю страницу и с трафиком все будет ок, а не весь топик целиком. Я не написал, что я знаю как сделать, но мне в лом. Я написал, что все методы для решения этой примитивнейшей задачи выливаются за пределы XSLT - то есть или использование внешних кодов или повторение механизма сортировки (зачем нужен тогда штатный). Чего тогда стоит XSLT, если он не умеет решить такую простейшую задачу. Пока я вижу только понты. Решения нормального нет. Вот все виды решения и все они кривые: 1. Динамически генерить код XSLT - слишком сложно и неэффективно. 2. Подключать другие языки - слишком сложно и неэффективно. 3. Забить заранее максимальное число сортировок - пока самый подходящий вариант, но, согласитесь, очень очень кривой. 4. Написать свою функцию сортировки по произвольному числу параметров - по сути повторить движок XSLT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:44 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Fixin Хахаха... Вот тебе пример из 1с 80. Как отвечающая сторона я имею право выбора языка. Как видишь, никаких внешних средств не использовано, сопровождение - раз плюнуть. Хахаха... Давай сравним производительность на 100000 строках ;) Давай сравним насколько сложно будет менять дизайн ;) У тебя, кстати, пока внешний вид НЕ СООТВЕТСВУЕТ тому который формирует твоя-же XSL :) Так что пока твой ответ не засчитан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:44 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon Fixin Хахаха... Вот тебе пример из 1с 80. Как отвечающая сторона я имею право выбора языка. Как видишь, никаких внешних средств не использовано, сопровождение - раз плюнуть. Хахаха... Давай сравним производительность на 100000 строках ;) Давай сравним насколько сложно будет менять дизайн ;) У тебя, кстати, пока внешний вид НЕ СООТВЕТСВУЕТ тому который формирует твоя-же XSL :) Так что пока твой ответ не засчитан Димзон, извините, мне не о чем с вами разговаривать. Потому что производительность будет совершенно одинакова. Я к счастью, знаю и 1С и XSLT, и VBS, поэтому могу делать такие выводы. Насчет дизайна - пора уже дизайн не в код выносить а в CSS. Извините, я сделал ошибку, вы - профан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:51 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 01:07 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinИзвините, я сделал ошибку, вы - профан. За свои слова ОТВЕЧАТЬ надо! Так, к сведению, на кого ты "сявкаешь" MCP , MCTS , MCPD:EAD VBScript Master , VB6 Master , JavaScript Master и ещё много чего Я настаиваю на продолжении дуэли . Для этого ты должен предоставить код который 1) Принимает в качестве параметра XML DOM с твоим XML-ем (а то у тебя какой-то левый набор аргументов) 2) Формирует корректный HTML аналогичный тому который формируется в XSL-ном примере FixinПотому что производительность будет совершенно одинакова. Я к счастью, знаю и 1С и XSLT, и VBS, поэтому могу делать такие выводы. Фиксин, ты мне конечно не поверишь, но я не только не имея 1С 80 но даже и не зная её вообще вижу в твоём "замечательном" коде уже 2 проблемы - одну ошибку и одну проблему с производительностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 12:06 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
В общем, с этой дуэлью мы отлонились от темы. Гражданин хотел проявить свои понты, а не ответить на вопрос. Вопрос остается прежний - XSLT не умеет сортировать по произвольному набору полей. И это его существенный недостаток, как языка работы с данными. Хочу аргументированных возражений или способа решения задачи, приведенной в примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 12:14 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinВ общем, с этой дуэлью мы отлонились от темы. Сливаешь? А понтов то сколько кидал! FixinВопрос остается прежний - XSLT не умеет сортировать по произвольному набору полей. И это его существенный недостаток, как языка работы с данными. Твой 1С тоже не умеет. Fixin Код: plaintext Это вызов библиотечной функции, равносильно как и dimzon Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 12:23 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Fixin думаю не честно говорить, что XSLT не умеет сортировать по произвольному набору полей. Я бы сказал, что говорить так совершенно безответственно. Ибо решения тебе предлагали, и продолжают это длеать. И не одно. Правильно писать так: XSLT не умеет сортировать по произвольному набору полей, так как я бы хотел чтобы он сортировал так что давай высказывайся от себя а не от XSLT, думаю что такой подход адекватнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 12:56 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
andrei77Fixin думаю не честно говорить, что XSLT не умеет сортировать по произвольному набору полей. Я бы сказал, что говорить так совершенно безответственно. Ибо решения тебе предлагали, и продолжают это длеать. И не одно. Правильно писать так: XSLT не умеет сортировать по произвольному набору полей, так как я бы хотел чтобы он сортировал так что давай высказывайся от себя а не от XSLT, думаю что такой подход адекватнее. Андрей, вы разводите демагогию В XSLT нельзя выбрать в цикле строки в порядке, если этот порядок задан в списке, а не заранее жестко определен. Давайте подходить объективно. А объективно - такой возможности нет. И это старнно для языка, позиционирующего себя как язык работы с данными. Не кривых решений не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:20 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon FixinВопрос остается прежний - XSLT не умеет сортировать по произвольному набору полей. И это его существенный недостаток, как языка работы с данными. Твой 1С тоже не умеет. Fixin Код: plaintext Это вызов библиотечной функции, равносильно как и dimzon Код: plaintext Разница только в том, что создатели 1С об этом позаботились, а XSLT - лажанулись и забыли. К тому же в XSLT оператор sort - это не функция, и именно его забыли реализовать в XSLT для случая, когда сортировка заранее не известна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:21 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon FixinВ общем, с этой дуэлью мы отлонились от темы. Сливаешь? А понтов то сколько кидал! [/quot] По просьбам Димзона размещаю полный код на языке 1С для сортировки XML и преобразования его в HTML. В коде разбора XML документа в таблицу значений названия методов примерные - нет под рукой 1С, чтобы проверить, но объем кода от этого не меняестя. Все выглядит именно так. Вызвать функцию ХМЛВХТМЛ с текстом 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:32 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Fixin ! Думаю я выражу общее мнение , если скажу: ЗАЕ...АЛ уже всех. Сам написать не можешь, других мнений не слушаешь, еще и грязью всех поливаешь, типа Я ПУП ЗЕМЛИ А ВЫ ТУПЫЕ. В общем если ты так уверен что это глюк языка иди на сайт создателя этого языка и предъявляй притензии им, а не нам! З.Ы,. предлогаю больше ему не отвечать. А модератору вообще его запостить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:41 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaFixin ! Думаю я выражу общее мнение , если скажу: ЗАЕ...АЛ уже всех. Сам написать не можешь, других мнений не слушаешь, еще и грязью всех поливаешь, типа Я ПУП ЗЕМЛИ А ВЫ ТУПЫЕ. В общем если ты так уверен что это глюк языка иди на сайт создателя этого языка и предъявляй притензии им, а не нам! З.Ы,. предлогаю больше ему не отвечать. А модератору вообще его запостить ПОГОДИТЕ ПОГОДИТЕ! ПОЖАЛУЙСТА, ДАЙТЕ МНЕ ЕМУ ОТВЕТИТЬ! А то у нас такая дискуссия разыгралась http://www.liveinternet.ru/users/fixin/post35291394/page3.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:46 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaFixin ! Думаю я выражу общее мнение , если скажу: ЗАЕ...АЛ уже всех. Сам написать не можешь, других мнений не слушаешь, еще и грязью всех поливаешь, типа Я ПУП ЗЕМЛИ А ВЫ ТУПЫЕ. В общем если ты так уверен что это глюк языка иди на сайт создателя этого языка и предъявляй притензии им, а не нам! З.Ы,. предлогаю больше ему не отвечать. А модератору вообще его запостить По существу ответь: где нормальные решения? Нету! Потому что авторы языка просто забыли сделать сортировку. Я хочу, чтобы вы признали это, Господа XSLTисты. Пока что аргументов против не было. Бан - это конечно спортивный метод ведения дискуссии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 15:06 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
SuSaFixin ! Думаю я выражу общее мнение , если скажу: ЗАЕ...АЛ уже всех. Сам написать не можешь, других мнений не слушаешь, еще и грязью всех поливаешь, типа Я ПУП ЗЕМЛИ А ВЫ ТУПЫЕ. В общем если ты так уверен что это глюк языка иди на сайт создателя этого языка и предъявляй притензии им, а не нам! З.Ы,. предлогаю больше ему не отвечать. А модератору вообще его запостить По поводу профессионализма. В ветке http://www.sql.ru/forum/actualthread.aspx?tid=405106 мне тоже говорили - ты хочешь слишком многого, такое невозможно, пока я не написал скрипт. Наверное, местные посетители привыкли на XSLT решать узкие, одноразовые задачи и идея универсального решения им не понятна. Отсюда и нападки при полном отсутствии какого-либо приемлемого решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 15:13 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Итак приступим Исходная формулировка задачи Моё решение вариант 1 Моё решение вариант 2 Решение Фиксина Допустим что исходный XML содержит 1000 элементов <line> Первым делом немного самокритики . Я считаю самым эффективным (особенно при больших размерах XML) из приведённых решений является Моё решение вариант 1 со следующими доработками: 1) Вместо конструкции Код: plaintext 2) Для удобства вместо хардкода текста XSLT в реальном приложении его проще вынести в ресурс или отдельный файл 3) Возможно(?) вместо использования макроса имеет смысл модифицировать XSL через DOM 4) Хорошо бы использовать более новые/быстрые версии XSLT-процессоров вместо MSXML3 Давайте теперь разберём вариант от Гения1С aka FIXIN (для тех кто не в курсе - Гений1С это то как он себя сам называет на форумах посвящённых 1C) Для удобства разбора я скопипастил код Гения и пронумеровал его. Итак: Код: plaintext Сначала самые мелкие придирки (простим эти мелочи Гению) Данный код формирует "HTML" не соответствующий тому который формирует XSLT - вообще нет тега <table>, XSLT подкрашивает чётные/нечётные строки и.т.п. Данный код при обработки сортировки не обрабатывает ASC/DESC Ошибки В действительности данный код работает направильно. Например при таком XML (символ # читать как & - особенности движка форума) Код: plaintext Код: plaintext Код: plaintext Очевидно что строка 15 должна выглядеть как-нибудь так: Код: plaintext Проблемы с производительностью (спорим такого Гений не ожидал) Забудем на время что 1С- интерпретатор (замечу что современные XSLT-процессоры компилируют XSLT в выполняемый код) Работа с XML DOM ( 26-49 ) Я не знаю что такое тип " ТаблицаЗначений " в 1C и насколько эффективно он работает, но с XML всё плохо. Судя по объявлению переменной 26 используется позднее связывание и, соответственно, работа через IDispatch. При 1000 строк содержащих по 3 поля имеем 3000 вызовов IDispatch. Это на самом деле заметные расходы! (Замечу что XSLT-процессор внутри себя использует ранее связывание и.т.д.) Но и это не самое страшное! Самое страшное по производительности кроется в 15 - конкатенация строк в цикле Итак, что происходит при выполнении операции Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 15:45 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon 1) .... Надо генерировать XSLT аналогично тому как генерируются <xsl:sort> 2) Для удобства вместо хардкода текста XSLT в реальном приложении его проще вынести в ресурс или отдельный файл 3) Возможно(?) вместо использования макроса имеет смысл модифицировать XSL через DOM 4) Хорошо бы использовать более новые/быстрые версии XSLT-процессоров вместо MSXML3 1 + 2) Если генерировать текст XSLT, то смысла ограничивать себя нет - полностью юзать все преимущества. А именно иметь отдельный общий xslt, который преобразует исходный xml с описанием данных и порядка сортировки во второй xslt (рабочая трансформация), который уже будет оптимально сформирован под данную структуру xml. И одновременно решаем кроме проблемы производительности еще и проблему хард-кодинга и реюзинга ;-)) 3) Если код несложный, то проще так. Через DOM и код чуть более сложный и работать помедленнее будет. А вообще лучше темплейты в таких случаях юзать - см. п.1-2. 4) Мелкософтовский сишный парсер вроде бы в свое время был одним из самых быстрых. Сейчас уже нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:19 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
TiG1 + 2) Если генерировать текст XSLT, то смысла ограничивать себя нет - полностью юзать все преимущества. А именно иметь отдельный общий xslt, который преобразует исходный xml с описанием данных и порядка сортировки во второй xslt (рабочая трансформация), который уже будет оптимально сформирован под данную структуру xml. И одновременно решаем кроме проблемы производительности еще и проблему хард-кодинга и реюзинга ;-)) Т.е. получаем 2х-этапную схему: 1) XML со структурой + мета-трансформация -> рабочая трансформация 2) XML с данными + рабочая трансформация -> конечный результат ЗЫ может именно этого от нас добивался наш скромный (на этом форуме ;)))) коллега Гений1С ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:27 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
TiG 1 + 2) Если генерировать текст XSLT, то смысла ограничивать себя нет - полностью юзать все преимущества. А именно иметь отдельный общий xslt, который преобразует исходный xml с описанием данных и порядка сортировки во второй xslt (рабочая трансформация), который уже будет оптимально сформирован под данную структуру xml. И одновременно решаем кроме проблемы производительности еще и проблему хард-кодинга и реюзинга ;-)) Частично согласен, применимость зависит от см. ниже TiG 3) Если код несложный, то проще так. Через DOM и код чуть более сложный и работать помедленнее будет. А вообще лучше темплейты в таких случаях юзать - см. п.1-2. Тут встаёт вопрос производительности. Например мы пишем сервер приложений, обрабатывающий множество запросов от пользователей. При использовании макросов мы тратим время на парсинг строки в DOM. При использовании XSLT->XSLT мы тратим время на конструирование большого XSLT. При модификации через DOM мы можем сделать что-то вроде: Код: plaintext 1. 2. TiG 4) Мелкософтовский сишный парсер вроде бы в свое время был одним из самых быстрых. Сейчас уже нет ? В данном случае речь идёт не сколько о самом парсере сколько о XSLT-процессоре (компоненте котрый умеет выполнять XSLT) + скорости выполнения XPath Например MSXML4 примерно в 2-3 раза быстрее MSXML3 за счёт индексирования XML и соотв. ускорения выполнения XPath А MSXML из .NET 2.0 ещё быстрее за счёт JIT-компиляции, т.е. он генерирует из XSLT выполняемый код :) Более того этот код можно сбросить на винт в виде DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:36 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzon Тут встаёт вопрос производительности. Например мы пишем сервер приложений, обрабатывающий множество запросов от пользователей. При использовании макросов мы тратим время на парсинг строки в DOM. При использовании XSLT->XSLT мы тратим время на конструирование большого XSLT. При модификации через DOM мы можем сделать что-то вроде: Код: plaintext 1. 2. Если использовать предложенный мной подход (с умом есессно ;) - то генерируемый xslt будет содержать единственный template отвечающий за сортировку, всю прочую логику выделять в отдельные шаблоны, да и сам он будет просто include-иться в основной xslt. Т.о. генерируемый xslt даже в плохих случаях размером вряд ли будет сильно отличаться от цифирки 1-3 кб (давайте возьмем N танков, нет N слишком много - давайте K ;-))) TiG 4) Мелкософтовский сишный парсер вроде бы в свое время был одним из самых быстрых. Сейчас уже нет ? В данном случае речь идёт не сколько о самом парсере сколько о XSLT-процессоре (компоненте котрый умеет выполнять XSLT) + скорости выполнения XPath Например MSXML4 примерно в 2-3 раза быстрее MSXML3 за счёт индексирования XML и соотв. ускорения выполнения XPath А MSXML из .NET 2.0 ещё быстрее за счёт JIT-компиляции, т.е. он генерирует из XSLT выполняемый код :) Более того этот код можно сбросить на винт в виде DLL.[/quot] Спасибо за информацию, буду знать. Активно с xml/xslt/etc. не так уж часто приходится работать, но стараюсь по крайней мере быть в курсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:51 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
dimzonИтак приступим Товарищ димзон, я думал вы что-то конкретное скажете. Эх вы... Вы меня разочаровали. С XML я работаю непосредственно через DOM, поэтому спецсимволы будут обрабатываться корректно, к тому же названия полей - это идентификаторы(!), о каких спецсимволах речь. Проблемы с производительностью я даже не рассматриваю - число строк не превышает 1000, т.к. это один экран веб-странички. Никто на один экран горы информации выплевывать не будет. И не рассуждайте пожалуйста про конкатенацию строк - для 1С это стандартный метод и он, уж поверьте, оптимизирован на уровне движка. ;-) Не позорьтесь. Я понимаю ваше желание досадить мне, но увы, ничего конкретного не прозвучало. А факт остается фактом - авторы XSLT просто забыли про динамическую сортировку и кроме извращений, никак по другому ее не получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:22 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
TiG dimzon 1) .... Надо генерировать XSLT аналогично тому как генерируются <xsl:sort> 2) Для удобства вместо хардкода текста XSLT в реальном приложении его проще вынести в ресурс или отдельный файл 3) Возможно(?) вместо использования макроса имеет смысл модифицировать XSL через DOM 4) Хорошо бы использовать более новые/быстрые версии XSLT-процессоров вместо MSXML3 1 + 2) Если генерировать текст XSLT, то смысла ограничивать себя нет - полностью юзать все преимущества. А именно иметь отдельный общий xslt, который преобразует исходный xml с описанием данных и порядка сортировки во второй xslt (рабочая трансформация), который уже будет оптимально сформирован под данную структуру xml. И одновременно решаем кроме проблемы производительности еще и проблему хард-кодинга и реюзинга ;-)) 3) Если код несложный, то проще так. Через DOM и код чуть более сложный и работать помедленнее будет. А вообще лучше темплейты в таких случаях юзать - см. п.1-2. 4) Мелкософтовский сишный парсер вроде бы в свое время был одним из самых быстрых. Сейчас уже нет ? Да это все понятно, но зачем для такой тривиальной задачи генерить XSLT? Согласитесь, это недоработка языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:25 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
Fixin С XML я работаю непосредственно через DOM, поэтому спецсимволы будут обрабатываться корректно, к тому же названия полей - это идентификаторы(!), о каких спецсимволах речь. Блин, внимательно код читай, умник. Реальное место где реально в твоём коде ошибка. Опять же докажи ! Fixin Проблемы с производительностью я даже не рассматриваю - число строк не превышает 1000, т.к. это один экран веб-странички. Никто на один экран горы информации выплевывать не будет. Ещё раз повторяю - если подобный код работает на сервере то даже для маленьких страничек производительность важна. Fixin И не рассуждайте пожалуйста про конкатенацию строк - для 1С это стандартный метод и он, уж поверьте, оптимизирован на уровне движка. ;-) Не позорьтесь. Ню-ню. Докажи Пока что опозорился ты не зная такой элементарной вещи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:40 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
FixinДа это все понятно, но зачем для такой тривиальной задачи генерить XSLT? Согласитесь, это недоработка языка. Необходимость подобной динамической сортировки данных не так часто встречается. Обычно такая потребность реализуется клиентским интерфейсом. Ваш случай, например, первый когда я столкнулся с этим вопросом в приложении к обработке XML (а вот при разработке DB-приложений да, заметно чаще, ту же отчетность взять, и там прямая дорога в dynamic sql). А XSLT, как и любой другой язык или средство разработки, разумеется имеет свои ограничения. Но и развивается ! Таки уже 2ая версия спецификации ;-) Если вы считаете отсутствие динамической сортировки действительно большим и неоправданным ограничением для XSLT - внесите и свою лепту в его развитие, киньте предложение в мейл-лист разработчиков на w3c.org . Возможно действительно эта фича как раз то, чего многим не хватает для полного счастья ;-) А может наоборот, настолько редкая и невостребованная вещь, что ей одно место - нет не та,м где вы подумали, а в самописных функциях для разового использования ;-) По крайней мере, я согласен с тем, что в xslt она будет смотреться намного более органично, чем скажем FOR-циклы, которых по первости сильно не хватает многим процедурно/объектно-ориентированным разработчикам PS Предлагаю топик прикрыть, поскольку он явно переходит в непродуктивную плоскость. Тов. Fixin убедился в том, что динамической сортировки, кою он хочет видеть в XSLT, там нет. А мы убедились в том, что для тов. Fixin-а XSLT попал в разряд "ошибок природы". Переубеждать его в этом смысла смысла не вижу ("Каждый имеет право на своё неправильное мнение" ;-) Зато время сбережем для более важных дел, чем раздувание этого топика еще на столько же страниц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:58 |
|
||
|
Можно ли отсортировать в конструкции for-each в динамическом порядке.
|
|||
|---|---|---|---|
|
#18+
TiG FixinДа это все понятно, но зачем для такой тривиальной задачи генерить XSLT? Согласитесь, это недоработка языка. Необходимость подобной динамической сортировки данных не так часто встречается. Обычно такая потребность реализуется клиентским интерфейсом. Ваш случай, например, первый когда я столкнулся с этим вопросом в приложении к обработке XML (а вот при разработке DB-приложений да, заметно чаще, ту же отчетность взять, и там прямая дорога в dynamic sql). А XSLT, как и любой другой язык или средство разработки, разумеется имеет свои ограничения. Но и развивается ! Таки уже 2ая версия спецификации ;-) Если вы считаете отсутствие динамической сортировки действительно большим и неоправданным ограничением для XSLT - внесите и свою лепту в его развитие, киньте предложение в мейл-лист разработчиков на w3c.org . Возможно действительно эта фича как раз то, чего многим не хватает для полного счастья ;-) А может наоборот, настолько редкая и невостребованная вещь, что ей одно место - нет не та,м где вы подумали, а в самописных функциях для разового использования ;-) По крайней мере, я согласен с тем, что в xslt она будет смотреться намного более органично, чем скажем FOR-циклы, которых по первости сильно не хватает многим процедурно/объектно-ориентированным разработчикам PS Предлагаю топик прикрыть, поскольку он явно переходит в непродуктивную плоскость. Тов. Fixin убедился в том, что динамической сортировки, кою он хочет видеть в XSLT, там нет. А мы убедились в том, что для тов. Fixin-а XSLT попал в разряд "ошибок природы". Переубеждать его в этом смысла смысла не вижу ("Каждый имеет право на своё неправильное мнение" ;-) Зато время сбережем для более важных дел, чем раздувание этого топика еще на столько же страниц. Слова не юноши, но мужа! Действительно, тема исчерпала себя. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 18:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=14&tid=1334364]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
492ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
121ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 885ms |

| 0 / 0 |
