|
Модераторы: diadiavova |
|
infarch |
|
||||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Здравствуйте.
У меня есть xml с такими вот составляющими:
Задача состоит в следующем: для заданного userid, опираясь на структуру orderfiles, получить c помощью xsl фрагмент структуры doclistings. Например, для userid=45 я должен получить вот такое:
В полученном результате должны присутствовать элементы doclist, docfolder, file. Кто нибудь может подсказать как такое сделать? |
||||
|
|||||
diadiavova |
|
||||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Ну так call-template же. Вот создаешь такой шаблон.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Это не совсем то. Я написал все элементы максимально просто, для примера. На деле же, doclist, docfolder и file имеют достаточно много атрибутов уникальных для них. И если файлы находятся в разных листах и фолдерах, то и в результативной выборке должны быть в них же. Нельзя просто написать лист, надо именно использовать реальный контейнер файла. Это касается и фолдера, и файла.
Это сообщение отредактировал(а) infarch - 17.8.2015, 16:02 |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
infarch, и в чем проблема? Допиши атрибуты куда надо и все. Кроме того, можно передавать любое количество параметров, так что все чего не достает можно добавить. Я тебе пример могу показать только на том материале, который ты предоставил.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Вот, в атаче пример реального xml файла. Попробую объяснить суть задачи. Есть некая виртуальная файловая система (структура doclists). Пользователи (users) заказывают оттуда распечатки файлов. Структура orderfiles показывает какой юзер какие файлы заказал. Теперь самое главное: для каждого пользователя надо создать отдельный кусок структуры doclists, в котором будут только непустые листы и фолдеры с файлами заказанными данным юзером.
Теперь надеюсь понятнее? ) Присоединённый файл ( Кол-во скачиваний: 1 ) testorder.664.rar 1,19 Kb |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
infarch, Если я правильно понял, то тебе надо, чтобы по сути дела преобразование выполняло немного разные действия, в зависимости от пользователя. Это возможно, если используются параметризированные преобразования. Тут проблема в том, что хотя стандарт и подразумевает возможность создания параметров верхнего уровня, но он ни коим образом не прописывает способа передачи аргументов преобразованию. Способ этот определяется исключительно XSLT-процессором. Так что все зависит от используемой технологии. В общем и целом просто объявляется xsl:param верхнего уровня (то есть не внутри темплейта, а внутри корневого элемента преобразования) и далее программно при преобразовании надо передать аргумент для соответствующего имени параметра. Тогда в том примере, который я показал не надо передавать userid при вызове шаблона, а вместо этого использовать параметр верхнего уровня.
В частности, если ты создаешь что-то на дотнете, то из списка перегрузок метода XslCompiledTransform.Transform(System.Xml.Xsl) выбери такой, у которого есть аргумент типа XsltArgumetList, ну и как передавать аргументы там уже в документации все написано. У других технологий правила могут быть другими -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
В конечном итоге я пришел к более другому решению. Идея в том, что для каждого юзера я получаю список айди файлов которые были им заказаны. Потом в каждом фолдере я беру файлы, айди которых входят в этот список. И тогда, если есть хоть один файл, я обрабатываю лист, фолдер, ну и файлы конечно.
Я не знал, что в выражении типа [@ID=$fids] xsl позволяет использовать список значений. Но попробовал, и получилось. |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
infarch, так тебе группировка нужна была?
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Наверно, можно сказать и так. Тут я, увы, не силен в терминологии. Но группировать надо было по данным, приходящим из совсем другого набора (не doclists, a orderfiles).
|
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Да терминология простая: если тебе надо из документа получить данные по одному критерию(например пользователю), это фильтрация, как и было написано в названии темы, а если тебе надо вывести данные по всем пользователям в один документ, при этом разместив данные по каждому в отдельную группу - это группировка. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
diadiavova, извиняй, запутался с терминами ) Ну как ни назови, я это сделал! Теперь знаю xsl немного больше. А не посоветуешь нормальную книгу или сайт по нему? А то все описания что я находил на редкость неудобоваримы.
|
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Когда я его изучал, у меня литературы по нему вообще не было, так что учил как придется, а сейчас просто уже смысла нет что-то искать, так что книги мне хоть и попадались, но оценить насколько они хороши не могу, поскольку не читал. В принципе, если уже базовые знания есть, то можно искать просто материал по конкретным вопросам, поскольку язык небольшой и там каких-то особых секретов нет, но из-за того, что у него возможности несколько ограничены, иногда приходится голову поломать решая казалось бы обычную для других языков задачу. Кстати группировку в XSLT рекомендую загуглить. В твоем случае все решилось просто по той причине, что в документе имелся готовый список пользователей, а вот ты попробуй средствами XSLT составить этот список, не имея его изначально. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
Правила форума "XML/XSLT" | |
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | XML, XSL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |