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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Условие в xsl 
:(
    Опции темы
Yakoot
Дата 21.3.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



доброго всем времени суток.. появилась срочная задачка поменять шаблон сообщения, а я до этого XSL в глаза не видел.. не могу понять, как сделать условие: если содержимое тега itemtype.intname равно какой-либо строке, то выводить одно, если другой то другое.. подскажите, пожалуйста?

Добавлено через 11 минут и 11 секунд
разобрался.. функция contains() тут нужна)
всем спасибо)
PM MAIL   Вверх
diadiavova
Дата 21.3.2012, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Вообще для проверки условий используются элементы if и choose. Но в принципе, от задачи зависит.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Yakoot
Дата 23.3.2012, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а вот еще вопрос: у меня есть два тега addon в корне.. в каждом из них есть name и value.. xsl:if я вроде научился делать... а как сделать цикл, проверяя каждый addon, и если в нем есть name с нужным содержимым, то выводить значение value?
PM MAIL   Вверх
diadiavova
Дата 23.3.2012, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Yakoot @  23.3.2012,  15:42 Найти цитируемый пост)
а как сделать цикл

Никак. В языке их просто нет. Есть for-each, решает подобные проблемы, но то, что ты описал, обычно делается не так. Следует сразу создавать такое выражение XPath, чтобы в набор узлов попадали нужные узлы, а не все подряд. Ну например, ты ищешь элементы addon с именем qwerty,тогда пишешь следующее выражение
Код

addon[name = 'qwerty']
И у тебя туда ничего лишнего не попадет.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Yakoot
Дата 23.3.2012, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



чот я не понял маленько)) странный этот xsl, всё не так.. исходный XML мне не подвластен, он генерится автоматически..
<doc>
... 
  <addon>
    <name>myslots</name>
    <value>10</value>
  </addon>
  <addon>
    <name>myservertype</name>
    <value>public</value>
  </addon>
...
</doc>
вот так выглядит кусок этот
в xsl я составляю текст сообщения, выбираю всякие значения из <xsl:template match='doc'> и в один прекрасный момент мне нужно вставить вот эту циферку 10 и слово public в таком виде: 
Количество слотов: 10
Тип сервера: public

видимо как-то нужно прогонять по очереди эти два addon и искать там совпадения.. 
PM MAIL   Вверх
diadiavova
Дата 23.3.2012, 15:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Yakoot @  23.3.2012,  16:43 Найти цитируемый пост)
видимо как-то нужно прогонять по очереди эти два addon и искать там совпадения..  

Ну вот примерно так
Код

<xsl:template match="doc">
Количество слотов: <xsl:value-of select="addon[name = 'myslots']/value"/>
Тип сервера: <xsl:value-of select="addon[name = 'myservertype']/value"/>
</xsl:template>



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Yakoot
Дата 26.3.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мм.. спасибо, чуть позже попробую)
PM MAIL   Вверх
Yakoot
Дата 26.3.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



всё работает) премного благодарен)
PM MAIL   Вверх
Yakoot
Дата 26.3.2012, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а вот еще проблемка.. я делаю <xsl:value-of select="substring-after(text, "http://url")"/>
текст выглядит так:
"нужная мне часть
http://url"
получается нужная мне часть возвращается вместе с переводом строки.. пытался в substring-after в "http://url" в начале писать всякие, как мне подсказал гугл, &#10, &#13, &#xA.. но чот толку от этого никакого.. обрезающей функции я тоже не нашел.. конечно можно в коде не переводить <xsl:value-of select... на новую строку, тогда забрав перевод строки в итоговом выводе всё станет как нужно.. но это, как мне кажется, немного кривое решение.. может подскажете чего?
PM MAIL   Вверх
diadiavova
Дата 26.3.2012, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Yakoot @  26.3.2012,  12:47 Найти цитируемый пост)
обрезающей функции я тоже не нашел..

normalize-space удаляет все пробельные символы вначале и в конце строки.
Цитата(Yakoot @  26.3.2012,  12:47 Найти цитируемый пост)
пытался в substring-after в "http://url" в начале писать всякие, как мне подсказал гугл, &#10, &#13, &#xA..

надо писать  &#13 и &#10 подряд. Завершать ессно надо точкой с запятой, здесь не делают, потому что форум сожрать может smile .
Только почему substring-after, когда substring-before ? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Yakoot
Дата 26.3.2012, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм.. на автомате написал наверное) там как надо сделано) точки с запятой я ставил, тут забыл просто про них) а насчет того, что надо оба подряд ставить, не знал smile ща попробую
PM MAIL   Вверх
Yakoot
Дата 26.3.2012, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так.. мне из текста нужно забрать всё что после url без перевода строки после этого самого url...
Код

substring-after(item.welcomemsg, 'http://url&#13т.з.&#10т.з.')

не работает

Это сообщение отредактировал(а) Yakoot - 26.3.2012, 12:30
PM MAIL   Вверх
diadiavova
Дата 26.3.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Эммммм... а как же это?
Цитата(Yakoot @  26.3.2012,  12:47 Найти цитируемый пост)
"нужная мне часть
http://url"

 smile 
Цитата(Yakoot @  26.3.2012,  13:28 Найти цитируемый пост)
не работает

Вообще-то способ переноса строки может варьироваться и зависит как от системы, так и от приложения, в котором создается документ. Я вот сейчас попробовал для вот такого документа
Код

<?xml version="1.0" encoding="utf-8" ?>
<root>
  текст1
  текст2
  текст3
</root>
выбрать все, что до и после текст2 с учетом перехода строки, сработал только вариант с &#10
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" indent="yes"/>

    <xsl:template match="/">
      <xsl:value-of select="substring-before(root,'&#10  текст2')"/>
      <xsl:value-of select="substring-after(root,'текст2&#10')"/>
      
    </xsl:template>
</xsl:stylesheet>
Так что этот способ не вполне надежен. Используй normalize-space, эта функция как раз для таких случаев и нужна.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Yakoot
Дата 26.3.2012, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня просто в нужной части тоже были переносы строк, normalize-space их убирает.. пришлось сделать выборку отдельно каждой строки посредством комбинации substring-after и substring-before =) надоело уже возиться с этим) пусть так и остаётся) спасибо за всё)
тему пока не закрываю, мож еще какие вопросы возникнут)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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