Автор |
Сообщение |
versus_spb
Новичок
Зарегистрирован: 23.03.2009
Сообщения: 17
|
[13828]
Ср Июн 10, 2009 15:48
Сравнение символов в XSLT 1.0
Как уже много тут обсуждалось, в XSLT 1.0 нет приличного сравнения строк или символов.
А также, нету преобразования символа в число, чтобы в дальнейшем можно было сравнить числа.
Столкнувшись с такой задачей придумал такое вот решение. Решил написать - вдруг кому пригодится, а может кто-то предложит более совершенное.
Итак, допустим, что мы знаем, какие символы нам предстоит сравнить, например, только русские буквы. Тогда создаём переменную со всем алфавитом, а дальше чтобы определить номер символа пользуемся парой функций. Привожу код:
Код:
<xsl:variable name="alphabet">абвгдеёжзийклмнопрстуфхцчшщъыьэюя</xsl:variable>
<xsl:value-of select="string-length(substring-before($alphabet, 'д'))" />
Вот и получили номер символа - 4.
По-моему, довольно компактное решение. Какие ещё будут предложения?
|
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13829]
Ср Июн 10, 2009 22:15
Почему нельзя сравнить непосредственно строки и символы?
Код: <xsl:if test="'A' < 'Z'">
<xsl:if test="'папа' <= 'мама'">
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
versus_spb
Новичок
Зарегистрирован: 23.03.2009
Сообщения: 17
|
[13830]
Ср Июн 10, 2009 22:28
Vasilisk писал(а): Почему нельзя сравнить непосредственно строки и символы?
Код: <xsl:if test="'A' < 'Z'">
<xsl:if test="'папа' <= 'мама'">
Возможно, у меня какая-то другая версия парсера, но у меня
такая конструкция
Код:
<xsl:if test="'A' < 'Z'">
done
</xsl:if>
не выдаёт ничего.
У меня libxml, версия 2.6.19.
Да и проблема эта неоднократно встречалась на этом форуме. Официально, вроде, считается, XSLT 1.0 не поддерживает сравнение строк. Могу найти соответствующие ссылки.
|
olpa
Любитель
Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
|
[13831]
Чт Июн 11, 2009 07:15
Я думаю, что обычно достаточно использовать xsl:sort (только не знаю, как он работает с не-английским).
Но вообще, неплохая идея. Спасибо, пригодится.
|
versus_spb
Новичок
Зарегистрирован: 23.03.2009
Сообщения: 17
|
[13832]
Чт Июн 11, 2009 09:37
Не за что
А есть предложение, как использовать xsl:sort для такой, к примеру, задачи нужно выбрать из xml все слова (ну скажем они в тэгах <word>), которые начинаются с букв до "Л"? Просто xsl:sort ведь может только отсортировать, он не может задать условие. Или я ошибаюсь?
|