|
Модераторы: diadiavova |
|
av84 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2015 Репутация: нет Всего: нет |
Привет всем.
Прошу помочь разобраться с XSLT. Стоит задача выбрать определённый набор узлов из HTML-документа и преобразовать его - обернуть каждый узел в div и span. К примеру:
У узлов будет множество атрибутов. В этом вся загвоздка. Пишу xsl-документ:
Всё хорошо "оборачивается". Но как только я пытаюсь добавить или скопировать атрибуты, сразу же лезут ошибки. К примеру, если пишу
выдаётся "XSLTProcessor::importStylesheet(): element template only allowed as child of stylesheet" и "XSLTProcessor::importStylesheet(): XSLT-apply-templates: could not compile select expression '@color*'" Идеальный вариант был бы через for-each прогнать все атрибуты и скопировать/создать их, но ничего не выходит. Стоит ли что-то существенно переделать, избавившись от цикла, или дополнить текущий функционал? Буду очень признателен за помощь. Это сообщение отредактировал(а) av84 - 21.1.2015, 08:12 |
||||||
|
|||||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Насколько я понимаю, таким образом ты хотел отобрать все атрибуты, начинающиеся с color? Такое не поддерживается, звездочкой можно заменить имя элемента или атрибута полностью, но применить ее к части имени не получится. Надо сделать как-то так примерно
Или в темплейте просто указать @color, а внутри уже в ифе копировать только те атрибуты, которые соответствуют этому условию. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
av84 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2015 Репутация: нет Всего: нет |
diadiavova,
спасибо, но, к сожалению, не всё так просто (или наоборот проще некуда?). Мне нужно пройтись по всем узлам документа, выбрать определённый набор узлов, и заменить: - p, h1-h6 на div>span с таким же значением узлов, а атрибуты скопировать в span; - tr на div; - td на span. То есть, к примеру, из документа:
нужно получить
Узлы заменяются, а атрибуты не выходит скопировать. Это сообщение отредактировал(а) av84 - 21.1.2015, 08:13 |
||||
|
|||||
diadiavova |
|
||||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Я посмотрел в первую очередь на ошибки, которые выдал компилятор. Исходя из первого сообщения следует, что ты воткнул темплейт не туда куда надо, он должен быть дочерним по отношению к корневому элементу стайлшит и никакие другие места для него не допускаются. Второе сообщение касалось как раз-таки селектора @color*, собственно о нем я и написал. Ну как вариант можно использовать форич в сочетании с копиоф. По тому, что ты описал, получилось следующее
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
av84 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2015 Репутация: нет Всего: нет |
diadiavova,
спасибо большое. Это то, что нужно. P.S. прошу прощения, но по ошибке нажал "report" над вашим сообщением. |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
av84 |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2015 Репутация: нет Всего: нет |
diadiavova,
можно ещё спросить у вас помощи? Расширяю функционал преобразования, и не получается одна вещь. Стоит задача преобразовать, к примера, такой участок документа:
вот в такой:
То есть основная сложность - обернуть все текстовые узлы, входящие в td или th в sharedString, сохранив при этом атрибуты родительского узла. Что я сделал:
У меня получается следующее:
То есть не выходит скопировать атрибуты родителя текстового узла для sharedString. Буду очень вам признателен, если подскажите, как можно это сделать или где и что посмотреть для этого. |
||||||||
|
|||||||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Бегло просмотрел и вот что смутило
Пустой форич и копируешь неизвестно что и неизвестно куда, а в следующей ветке вроде копируешь атрибут, но при этом не создаешь элемент. Куда ты его копируешь? Я не вникал, может вечером посмотрю, если ты не решишь к тому времени, но сделать надо примерно так: обходи не текстовые узлы, а элементы, содержащие текстовые узлы примерно такие //td//*[text()], для каждого такого элемента создавай sharedString и копируй в него сначала атрибуты, потом - текст. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
av84 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2015 Репутация: нет Всего: нет |
Дело в том, что если так выбирать, то копируется всё один-в-один, не оборачивая текст в sharedString. Я немного доработал представленный мной же выше способ, и всё получилось как надо:
В любом случае спасибо. Вы меня натолкнули на мысль для другого преобразования =) |
||||
|
|||||
av84 |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2015 Репутация: нет Всего: нет |
Добрый день.
У меня опять загвоздка. Начинаю понемногу разбираться в XSLT, но всё равно не всё выходит. Очень надеюсь на подсказку. Посмотрите, пожалуйста. Имеется преобразованная таблица. К примеру:
Преобразовываю я её, к слову, вот так:
И получается:
Но вопрос следующий: возможно ли получить такое:
? То есть добавить на места "ячеек", на которые распространяется "действие" rowspan'ов, пустые узлы с атрибутом nottransform. Получается, высчитываем по значению атрибута на какое кол-во элементов row распространяется "действие" rowspan'а, берём значение позиции элемента c и каким-то образом добавляем и сортируем? Или как? Как это лучше сделать? Возможно ли вообще подобное? Буду очень благодарен за помощь или подсказку. |
||||||||
|
|||||||||
Правила форума "XML/XSLT" | |
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | XML, XSL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |