![]() |
|
Модераторы: diadiavova |
![]()
|
|
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Добрый день! В xml файле, имеется тег, в котором содержится ФИО. Нужно проверить что данное ФИО содержит только украинские символы ...
Я пока что придумал только одно решение, использовтаь choose в котором будет просто перечень всего алфавита, если встречается символ, то все ок, а в условии otherwise вывести ошибку, что поле содержит недопустимый символ. Но есть проблема, как вызвать этот template для каждого символа строки ? Или может быть есть более простой вариант ? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Он должен быть рекурсивным, то есть шаблону передается строка, он проверяет первый символ и вызывает сам себя, только передавая подстроку начинающуюся со второго символа. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Да, так и сделал ) Уже все работает. Но есть пару проблем ...
Первое, как остановить рекурсию если уже был найден один недопустимый символ ? Второе, как проверить симолв на апостаф ? ( это символ - ' ). Добавлено через 4 минуты и 31 секунду С апострофом проблему решил =) Осталась одна проблема с принудительным выходом из рекурсии ... если был найден недопустимый сивол. можно из шаблона вернуть признак какой-то ? или может быть можно изменить значение глобальной переменной ? (хотя когда читал было написано, что значения переменных в xslt менять нельзя). |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Ну вообще-то я имел в виду, что шаблон должен возвращать булеву величину, поэтому тут рекурсия организуется довольно просто: проверяешь, первый символ строки, если он не отсутствует в списке - возвращаешь false(), если он там есть выполняешь рекурсивную логику дальше. Все при помощи элемента choose -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| 4epT |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Ммм извиняюсь, а как вернуть из шаблона значение ? (в данном случае булево)
Вот мой вариант шаблона: Шаблон для проверки символа:
Шаблон вызывающий сам себя:
|
||||
|
|||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
4epT, ну вот я примерно набросал логику, мог где-то ошибиться, не проверял как работает, но думаю суть понятна будет. Сначала на до объявить переменную, в которой будут содержаться все символы алфавита(можно объявить ее на верхнем уровне, а можно и в самом шаблоне), у меня в примере само собой другие буквы.
Далее сам шаблон примерно такой
Переменная first-contains проверяет, содержится ли первый символ строки в алфавите. Если строка имеет нулевой размер - возвращаем true(), если это один символ и он содержится в алфавите - то же самое. Если строка длиннее нуля и первого символа в алфавите нет - возвращаем false(). В ином случае(если строка длиннее единицы и первый символ содержится в алфавите, условие можно и явно прописать), то мы вызываем шаблон рекурсивно и передаем строку со второго символа. Думаю дальше разберешься. Возможно шаблон сработает как есть, возможно что-то подправить надо. Вызывая его, передавай значение какой-то переменной, ее и используй в выражениях. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
![]()
|
| Правила форума "XML/XSLT" | |
|
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | XML, XSL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |