![]() |
|
Модераторы: 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. |