![]() |
Модераторы: diadiavova |
![]() ![]() ![]() |
|
Karabas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.6.2006 Репутация: нет Всего: нет |
Всем привет!
Я все понимаю, идея XML -- отделения контента от оформления -- гениальная, но бывают ситуации когда этот подход мешает. Попытка вставить гиперссыку в текстовый блок не увенчалась успехом: XML: <page> <p> Text, text, text, text, text, text, text, text, text, text, <link href="index.html">And here a link</Plink> text, text, text, text, text, text, text, text, text, text, </p> </page> И из него генерю html. Вот такой XSL (это отрывок, остальные части работают нормально) игнорирует начилие тега <link> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> ......... <xsl:template match="p"> <p class="p"> <xsl:value-of select="."/> </p> <xsl:apply-templates select="link"/> </xsl:template> .......... Если вставлять <xsl:apply-templates select="link"/> в XSL рядом с <xsl:apply-templates select="p"/> то все ссылки оказываются после текста... ![]() А как можно иначе (средствами XSL)? |
|||
|
||||
Beard |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.7.2005 Где: Санкт-Петербург Репутация: 7 Всего: 9 |
В таких случаях лучше использовать секцию CDATA в XML:
а в шаблоне
Добавлено @ 15:10 Ну а если не хочется пользоваться CDATA, то можно сделать так:
Это сообщение отредактировал(а) Beard - 15.6.2006, 12:30 |
||||||
|
|||||||
Karabas |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.6.2006 Репутация: нет Всего: нет |
Спасибо за ответ.
CDATA не хотелось использовать, чтобы не загромождать исходный файл, а вариант с child::node работает. На данном этапе меня такое решение устраивает, а вообще на будущее можно, ли сделать чтобы XSL обрабатывал такие вставленные символы? Не отвлекаясь от исходного примера, сделать преобразователь от исходной ссылки
в стандартную html ссылку:
То есть, мой вопрос скорее касается основ XML: можно ли обрабатывать команду непосредственно в том месте, где она находится в исходном тексте, вместо того чтобы вызывать ее специально? Я понимаю, это в какой-то мере противоречит самой идее XML, но неужели такой вариант не был предусмотрен при разработке XML стандарта? Я так понимаю, этого можно добиться двойной обработкой: 1) создать промежуточный XML с заменой ссылок на нужный формат, 2) преобразование промежуточного XML в html. А более естественных способов нет? |
||||
|
|||||
Karabas |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.6.2006 Репутация: нет Всего: нет |
![]() Вот тут XSL Concepts and Practical Use нашел пример обработки тэга в том месте где он появляется. Надо в исходном коде НЕ указывать аттрибутом match="" что ему обрабатывать:
Пример использования:
переходит в
Всем спасибо за помощь и сочувствие! |
||||||
|
|||||||
Beard |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.7.2005 Где: Санкт-Петербург Репутация: 7 Всего: 9 |
Наверное, имелось ввиду XSL?
Из кода становится ясно, как ... Добавлено @ 10:08 Опоздал ![]() |
||||
|
|||||
Karabas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.6.2006 Репутация: нет Всего: нет |
Спасибо, Beard!
|
|||
|
||||
Porshen |
|
||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.6.2006 Репутация: нет Всего: нет |
Здравствуйте всем!
Эти сообщения мне очень помогли (что касается <xsl:copy-of select="child::node()" /> ), но достаточно скоро я столкнулся с почти таким же случаем, но вот с ним не смог разобраться. Вероятно не хватает знаний XPath... так вот... имея вот такой XML (html разметка указана только для того, чтобы показать, в каких узлах она должна быть)
нам нужно сделать из него html страничку. Главное, как упоминал выше Karabas, вытащить из узлов именно текст с тегами! Вот как я решил вопрос с вытаскиванием кода внутри узла description : в нужном месте вызвал заготовленный ранее шаблон
Вроде бы все хорошо и решение красивое, НО! Как быть когда надо вызвать шаблон внутри итерации <xsl:for-each>, когда надо применять шаблон к однотипным, но различным узлам с различным содержанием? Вот такая xsl таблица стилей несколько раз выведет содержимое узла text внутри узла service с id=1 (что, вобщем-то, логично и понятно)
пробовал вот так (сразу внутри итерации писать <xsl:copy-of>)
Но в этом случае у меня вытаскиваемый из узла html код обрамляется открывающим и закрывающим тегами <text>, то есть в месте вызова <xsl:copy-of> у меня лезет вот что
а надо чтоб было просто
Думаю надо как то адресовать содержимое <text> средствами XPath, но вот как ?? Или написать XSL похитрей. Подскажете??? ![]() Это сообщение отредактировал(а) Porshen - 15.5.2007, 05:17 |
||||||||||||
|
|||||||||||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 3 Всего: 42 |
Просто используйте внутри for-each отновительный путь
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
Porshen |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.6.2006 Репутация: нет Всего: нет |
![]() |
|||
|
||||
POLTER |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 25.8.2006 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
Здравствуйте.
Аналогичная проблема возникла и у меня. Но почему-то ни первый пример с CDATA, ни второй с child::node() не работают в FireFox и Opera, хотя в IE все отображается как надо. Существует ли кроссбраузерное решение? (Преобразование link в a и т.п. не подходит, т.к. тегов может быть много). Спасибо! --------------------
Существует 10 типов людей: те, которые понимают твоичный код и те, которые его не понимают. |
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 3 Всего: 42 |
только что проверила. Вариант с child::node() работают одинаково успешно в IE 6.0, Firefox 2.0.0.4, Opera 9.21. Какие у вас версии броузеров и в чем отличие, что в каком броузере видите?
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
POLTER |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 25.8.2006 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
Тестировал в IE6, 7; Opera 9.20; FireFox 2.0.03.
В IE все как положено - все html-теги выполняются. А Опера и Лиса не распознают html-теги, т.е. выводят простой неформатированный текст. Кстати, скопировал отсюда xml Porshen-a с вашим xsl-кодом -- результат тот же. --------------------
Существует 10 типов людей: те, которые понимают твоичный код и те, которые его не понимают. |
|||
|
||||
Beard |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.7.2005 Где: Санкт-Петербург Репутация: 7 Всего: 9 |
В таком случае единственно правильное решение - генерировать HTML на стороне сервера и отсылать клиенту, а не использовать встроенные процессоры браузеров, которые могут сильно отличаться.
Вроде для мозилл надо явно написать в скрипте:
|
||||||
|
|||||||
POLTER |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 25.8.2006 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
Спасибо большое, помогло! ![]() Просто у меня стояло до этого xml, так как я вывожу xHTML, но оказывается работает и так.
Ну теперь-то все работает кроссбраузерно ![]() XSLT лучше в том плане, что не нужно разбираться с разными шаблонизаторами. --------------------
Существует 10 типов людей: те, которые понимают твоичный код и те, которые его не понимают. |
||||
|
|||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 3 Всего: 186 |
Тут не в output-method дело, а в том,что нормальные браузеры почему-то не догадались, что это XHTML-страница. Вероятнее всего, ты забыл проставить доктайпы и пространство имён XHTML:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |