| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > XML, XSL > Условие в xsl |
| Автор: Yakoot 21.3.2012, 14:22 |
| доброго всем времени суток.. появилась срочная задачка поменять шаблон сообщения, а я до этого XSL в глаза не видел.. не могу понять, как сделать условие: если содержимое тега itemtype.intname равно какой-либо строке, то выводить одно, если другой то другое.. подскажите, пожалуйста? Добавлено через 11 минут и 11 секунд разобрался.. функция contains() тут нужна) всем спасибо) |
| Автор: diadiavova 21.3.2012, 15:52 |
| Вообще для проверки условий используются элементы if и choose. Но в принципе, от задачи зависит. |
| Автор: Yakoot 23.3.2012, 14:42 |
| а вот еще вопрос: у меня есть два тега addon в корне.. в каждом из них есть name и value.. xsl:if я вроде научился делать... а как сделать цикл, проверяя каждый addon, и если в нем есть name с нужным содержимым, то выводить значение value? |
| Автор: diadiavova 23.3.2012, 14:51 | ||
Никак. В языке их просто нет. Есть for-each, решает подобные проблемы, но то, что ты описал, обычно делается не так. Следует сразу создавать такое выражение XPath, чтобы в набор узлов попадали нужные узлы, а не все подряд. Ну например, ты ищешь элементы addon с именем qwerty,тогда пишешь следующее выражение
|
| Автор: Yakoot 23.3.2012, 15:43 |
| чот я не понял маленько)) странный этот 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 и искать там совпадения.. |
| Автор: Yakoot 26.3.2012, 10:13 |
| мм.. спасибо, чуть позже попробую) |
| Автор: Yakoot 26.3.2012, 10:50 |
| всё работает) премного благодарен) |
| Автор: Yakoot 26.3.2012, 11:47 |
| а вот еще проблемка.. я делаю <xsl:value-of select="substring-after(text, "http://url")"/> текст выглядит так: "нужная мне часть http://url" получается нужная мне часть возвращается вместе с переводом строки.. пытался в substring-after в "http://url" в начале писать всякие, как мне подсказал гугл, 
, 
, 
.. но чот толку от этого никакого.. обрезающей функции я тоже не нашел.. конечно можно в коде не переводить <xsl:value-of select... на новую строку, тогда забрав перевод строки в итоговом выводе всё станет как нужно.. но это, как мне кажется, немного кривое решение.. может подскажете чего? |
| Автор: diadiavova 26.3.2012, 11:58 | ||
normalize-space удаляет все пробельные символы вначале и в конце строки.
надо писать 
 и 
 подряд. Завершать ессно надо точкой с запятой, здесь не делают, потому что форум сожрать может Только почему substring-after, когда substring-before ? |
| Автор: Yakoot 26.3.2012, 12:05 |
| хм.. на автомате написал наверное) там как надо сделано) точки с запятой я ставил, тут забыл просто про них) а насчет того, что надо оба подряд ставить, не знал |
| Автор: Yakoot 26.3.2012, 12:28 | ||
так.. мне из текста нужно забрать всё что после url без перевода строки после этого самого url...
не работает |
| Автор: diadiavova 26.3.2012, 12:54 | ||||
| Эммммм... а как же это? Вообще-то способ переноса строки может варьироваться и зависит как от системы, так и от приложения, в котором создается документ. Я вот сейчас попробовал для вот такого документа
|
| Автор: Yakoot 26.3.2012, 13:02 |
| у меня просто в нужной части тоже были переносы строк, normalize-space их убирает.. пришлось сделать выборку отдельно каждой строки посредством комбинации substring-after и substring-before =) надоело уже возиться с этим) пусть так и остаётся) спасибо за всё) тему пока не закрываю, мож еще какие вопросы возникнут) |