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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка элементов по шаблону 
V
    Опции темы
artuska
  Дата 12.4.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!

Есть XML с такой вот структурой:
Код

<suggestions>
 <item>here</item>
 <item>goes</item>
 <item>many</item>
 <item>words</item>
 <item>e.g.</item>
 <item>suggestions</item>
 <item>in</item>
 <item>english</item>
 <item>language</item>
 <item>one</item>
 <item>or many</item>
 <item>words</item>
 <item>in</item>
 <item>every</item>
 <item>tag</item>
</suggestions>


Это данные для подсказки в поле поиска (как в Гугле - вводишь слово, а под инпутом появляются возможные варианты того, что ты ищешь).
Так вот, как используя XSL выбрать все слова, начинающиеся на, например, букву 'o'?

На выходе должен быть вот такой HTML код:
Код

<ul>
 <li>one</li>
 <li>or many</li>
</ul>


Вот мой вариант:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">
  <ul>

   <xsl:for-each select="suggestions[item='o*']"> // вот здесь не знаю, что вообще писать, чтобы выбрать слова на букву 'О'
    <li><xsl:value-of select="."/></li>
   </xsl:for-each>

  </ul>
 </xsl:template>
</xsl:stylesheet>


Или выборка по шаблону вообще по-другому делается?

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


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


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

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



Цитата(artuska @  12.4.2010,  18:07 Найти цитируемый пост)
 вот здесь не знаю, что вообще писать, чтобы выбрать слова на букву 'О'

Если дело в XPath выражении, то можно написать так
Код

  //suggestions/item[starts-with( text(), 'o')]

Только, честно говоря, не знаю чего ты этим добьёшься. Преобразование происходит один раз, когда документ запрашивается с сервера, а тебе надо, чтобы это происходило постоянно в интерактивном режиме.
Все эти возможности уже давно реализованы и не один раз в различных плагинах для яваскрипт-фреймворков, а xslt тут тебе не поможет.


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


Шустрый
*


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

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



Цитата(diadiavova @  12.4.2010,  22:12 Найти цитируемый пост)
Только, честно говоря, не знаю чего ты этим добьёшься. Преобразование происходит один раз, когда документ запрашивается с сервера, а тебе надо, чтобы это происходило постоянно в интерактивном режиме.
Все эти возможности уже давно реализованы и не один раз в различных плагинах для яваскрипт-фреймворков, а xslt тут тебе не поможет. 

Вот, отлично, это то, что надо! Ну а что значит «что добьешься»? — пользователь вводит букву "А", посылается АЯКС запрос к ПХП файлу, который и оперирует XML'ом  и XSL'ом и возвращает готвый код подсказок.

Вопрос следующий — вот если пользователь ввел "А", то слова на букву "А" найдутся, а вот на букву "а" — нет. Как сделать, чтобы //suggestions/item[starts-with(text(), 'o')] не зависела от регистра, чтобы и маленькие и большие буквы искала?

UPD:
Хм, а где ты вычитал про функцию starts-with()? — здесь, например, в упор не вижу.

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


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


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

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



Цитата(artuska @  13.4.2010,  00:47 Найти цитируемый пост)
посылается АЯКС запрос к ПХП файлу, который и оперирует XML'ом  и XSL'ом и возвращает готвый код подсказок.

Можно, конечно, но чойт мне кажется это как-то  smile . Если на каждое изменение в текстбоксе будет посылаться запрос и выполняться такая сложная операция, это сервер не перегрузит? Всё-таки сервер не с одним пользователем работает.
Цитата(artuska @  13.4.2010,  00:47 Найти цитируемый пост)
 Как сделать, чтобы //suggestions/item[starts-with( text(), 'o')] не зависела от регистра, чтобы и маленькие и большие буквы искала?

Средствами xslt вроде никак, но раз это всё на пхп делается - переводи в нижний(или верхний) регистр на пхп и только потом посылай в обработку. 


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


Шустрый
*


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

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



Цитата(diadiavova @  12.4.2010,  23:56 Найти цитируемый пост)
Средствами xslt вроде никак

Жаль. Ну лана.

Вообщем, всё ок, diadiavova — спасибо!

Тему можно считать закрытой.
PM MAIL   Вверх
magelan
Дата 14.4.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



в XSL все можно... только это "дорогая" операция.


Код

<xsl:variable name="lower">abcdefghijklmopqrstuvwxyzабвгдежзийклмнопрстуфхцчшщэюя</xsl:variable>
<xsl:variable name="upper">ABCDEFGHIJKLMOPQRSTUVWXYZАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ</xsl:variable>

<xsl:for-each select="//suggestions/item[starts-with(translate(text(),$upper, $lower), 'o')]">
...


P.$. Господа, код привожу не для этой задачи, и не чтобы выпендриться, просто для общей инфы, проблема с регистрами достаточна частая при обработке.

P.P.$. Дядя Вова абсолютно прав, для этой задачи надо использовать что-то шустрее чем XSLT в идеале надо возвращать только данные для вывода:
Код

<suggestions>one;or many;оther</suggestions>

которые на клиенте разбираются в массив для вывода одним вызовом скриптовой функции .split(';');

Это сообщение отредактировал(а) magelan - 14.4.2010, 12:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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