Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обернуть некоторые ноды, С помощью xslt 
:(
    Опции темы
lusever
Дата 29.5.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



Дан xml:
Код

<root>
    <div>1</div>
    <div span="true1">2</div>
    <block>
        <all span="true2">content all</all>
        <all>2 all</all>
    </block>
</root>


Нужно, чтобы строковые значения с атрибутом span="...", оборачивались xslt в мой <span class="class-name"></span>.

Проблема вообщем-то в том, что исходный xslt файл нам неизвестен, т.е. править его нельзя. Мы его импортируем например из: <xsl:import href="xz.xsl"/> в my.xsl.
Далее, в my.xsl я делаю так:
Код

<xsl:template match="*[@span]">
    <span class="class-name"><xsl:apply-imports/></span>
</xsl:template>


Но есть загвоздка. Код обрабатывает лишь те ноды, которые в xz.xsl обрабатываются так:
Код

<xsl:template match="div">
    <xsl:value-of select="."/>
</xsl:template>


А те что в xz.xsl:
Код

<xsl:template match="block">
    <xsl:value-of select="all"/>
</xsl:template>
 просто забываются.

Как мне это побороть? xz.xsl менять нельзя.
PM MAIL WWW   Вверх
lusever
Дата 29.5.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



Цитата(JVM @  29.5.2007,  10:33 Найти цитируемый пост)
И это правильно 
У вас шаблон <xsl:template match="*[@span]">, а у <block> нет атрибута @span.


Спасибо за то, что создали новую тему и ответили мне. Советую, при необходимости ответить, использовать другой браузер. У меня Firefox тоже местами глючит.

Мне block не надо обрамлять. 
Надо, что бы <xsl:value-of select="all"/> уже содержал необходимый <span class="class-name">.
PM MAIL WWW   Вверх
_Valery
Дата 29.5.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



lusever, шаблон
Код

<xsl:template match="*[@span]">
    <span class="class-name"><xsl:apply-imports/></span>
</xsl:template>

выберет:
Код

<div span="true1">2</div>

и
Код

<all span="true2">content all</all>

А xz.xsl обработает только первый из них.

Это сообщение отредактировал(а) _Valery - 29.5.2007, 20:31
PM   Вверх
lusever
Дата 29.5.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



Я прекрасно понимаю, что этот метод сработает только для первого случая. А как нужно мне сделать, чтобы первый и второй случай работали (как можно универсальнее).
PM MAIL WWW   Вверх
_Valery
Дата 30.5.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



lusever, изменить/дополнить xz.xsl, потому что тот же
Код

<xsl:template match="block">
    <xsl:value-of select="all"/>
</xsl:template>

непонятно зачем нужен в контексте данной задачи.
PM   Вверх
lusever
Дата 30.5.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



Повторюсь. xz.xsl, к сожалению, изменять нельзя. Не знаю уже как вывернуться. Неделю бьюсь.

PM MAIL WWW   Вверх
_Valery
Дата 30.5.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



lusever, обработка узлов, содержащих атрибут span  должна происходить именно в xz.xsl?
Вообще говоря, вижу два возможных варианта: 
    • дописать дополнительные шаблоны в my.xsl;
    • переписать уже имеющуюся выборку узлов в my.xsl и ничего не менять в xz.xsl, но это будет работать только в предоставленном вами  
       xml-документе, то есть даже смена порядка следования узлов all все собьет.
PM   Вверх
lusever
Дата 30.5.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



Если можно, попjдробнее про дописать шаблон в my.xsl.
PM MAIL WWW   Вверх
_Valery
Дата 31.5.2007, 17:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



Например:
Код

    <xsl:template match="block">
        <xsl:for-each select="*[@span]">
            <span class="class-name">
                <xsl:value-of select="."/>
            </span>
        </xsl:for-each>
    </xsl:template>

PM   Вверх
lusever
Дата 31.5.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



Очень хорошо.
Вы забыли про <xsl:apply-imports/>.
Никто не знает что они там в xz.tpl натворят.
PM MAIL WWW   Вверх
_Valery
Дата 31.5.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



Цитата(lusever @  31.5.2007,  19:34 Найти цитируемый пост)
Вы забыли про <xsl:apply-imports/>.
Никто не знает что они там в xz.tpl натворят. 
 поясните.
PM   Вверх
lusever
Дата 31.5.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.4.2007

Репутация: нет
Всего: 3



К примеру, в xz.xsl кто-то написал:
Код

<xsl:template match="block">
    <div>
        <h1>Новость:</h1>
            <xsl:value-of select="all"/>
    </div>
</xsl:template>


И надо чудесным образом, превратить в:
Код

<xsl:template match="block">
    <div>
        <h1>Новость:</h1>
            <!-- <добавлено из my.xsl> -->
            <span class="class-name">
            <!-- </> -->
                <xsl:value-of select="all"/>
            <!-- <добавлено из my.xsl> -->
            </span>
            <!-- </> -->
    </div>
</xsl:template>


PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.