![]() |
Модераторы: diadiavova |
![]() ![]() ![]() |
|
NorsaG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
Добрый день
Подскажите, пожалуйста, новичку... Есть такой xml -
Нужно для колонок, подобных 'BAD_ATTR', брать значения с учетом разделителя (в данном случае ";") и помещать их на ячейку ниже. Соответственно, следующую строку нужно начинать исходя из того, сколько дополнительных ячеек было использовано. Для меня вся сложность именно в том, как организовать смещение. Приблизительный рисунок прилагается. Спасибо всем, кто сможет подсказать. http://s2.ipicture.ru/uploads/20110304/TkqUQMNN.bmp |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Я, честно говоря, не понял, что именно надо получить. Преобразование позволяет из одного документа получить другой, поэтому для ясности все же объясни что из чего тебе надо получить и что конкретно вызывает затруднение.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
NorsaG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
Извинясь за неточно сформулированную задачу.
По порядку: Есть xml, у которой есть узлы, в которых может храниться некоторый список значений (через какой либо разделитель). Нужно с помощью xsl-преобразования настроить вывод этой xml-ки в excel таким образом, чтобы этот список отображался не в одной ячейке,а использовал нижележащие, по одной ячейке на элемент списка. Вот набросал xml для рисунка, который сначала предоставил.
То есть если какой либо узел (например 'B') какого то элемента имеет n-элементов списка внутри себя, то следующий элемент (ROW) должен отобразится через n строк... Вот.. Надеюсь, что сейчас стало немного понятнее. Основное затруднение - каким образом определить количество строк (хотя это не сложно), нужных под один элемент (ROW) и как распечатывать эти списки. Грубо говоря, не знаю как сделать возврат на прежнюю строку, если заполняя её, переключился и начал заполнять ячейки по вертикали. Это сообщение отредактировал(а) NorsaG - 4.3.2011, 22:06 |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
NorsaG, я полагаю, твоя задача проще решается при помощи макроса. В принципе xslt вполне способен ее решить тоже, но без приблуд это будет не просто, так что если возможность использовать другие средства, я рекомендую ей воспользоваться. Если же надо сделать это непременно с помощью xslt, то тут тебе помогут функции contains. substring-before и substring-after. Учитывая, что разделителей может быть более одного, вызывать их видимо придется рекурсивно. То, что сразу несколько элементов могут содержать разделители и их как-то надо объединять в одну строку - может оказаться проблемой, хотя при желании можно решить и ее, просто логика будет сложной, хсл для таких задач не особенно приспособлен.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
NorsaG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
Спасибо большое за ответ
А теперь вопросы от нуба ![]() Можно ли как нибудь реализовать макрос программно (в смысле захардкодить)? Про contains я впринципе уже думал - при помощи теплейта рекурсивно можно получить как количество элементов списка, так и каждый элемент на каждом шаге.. Но вот как вернуться на начальную строчку (когда список мы напечали)... Вот это для меня самое сложное... Ещё раз спасибо за ответ.. Пойду дальше думать ![]() Это сообщение отредактировал(а) NorsaG - 4.3.2011, 22:36 |
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Макрос - это и так программа. В эселе есть поддержка макросов, пишутся они на бейсике.
Ну в общем, твоя задача показалась мне интересной, поэтому я над ней покумекал и вот, что получилось
Вроде делает то, что надо. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
NorsaG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
Спасибо большое за то, что помогли
И ещё оффтоп - подскажите, пожалуйста, возможно ли объединить преобразования xml--->xml и xml--->xml (excel-версия) в одном xsl? И если можно, то как это сделать... Спасибо за вашу помощь. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Я не понял вопроса. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
NorsaG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
Я имею ввиду,то что вы предложили как решение исходной задачи расширение имеющегося xml. Можно ли к этому преобразованию добавить ещё одно, которое сделает нужные мне трансформации. Меня смущает то, что появятся две одинаковые строчки "<xsl:template match="REPORT">".
|
|||
|
||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
А что мешает? В данном случае результат преобразования - обычный хмл-документ и к нему тоже можно применять преобразования. Правда, вполне возможно, что правильнее было бы в одном преобразовании предусмотреть все таким образом, чтобы получился нужный результат.
Опять не понял. Ты хочешь соединить два преобразования в один документ что ли? Тогда почему сразу не сформулировать задачу таким образом, чтобы на выходе получилось именно то, что нужно? Добавлено через 3 минуты и 18 секунд
И кстати, я ничего такого не предлагал. Задача была сформулирована именно таким образом, отсюда и решение. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
NorsaG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
Да, два преобразования в один документ.
Ну просто это уже не по теме и немного другая задача. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Вот так в лоб, просто объединив два преобразования, эту задачу не решишь. ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
NorsaG |
|
||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.3.2011 Репутация: нет Всего: нет |
diadiavova, спасибо большое, что помогли
Выкладываю то, что можно назвать конечным результатом (на самом деле xsl - конечный вариант, а xml - просто пример который первый попался(извиняйте за то, что он очень разреженный и не содержит какой либо нормальной информации, всё таки интеллектуальная собственность, всё такое ![]() Конечно этот xsl тюнить и тюнить, но всё таки... Вот xml
А вот, собственно, то, ради чего всё это затевалось
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "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. |