Intereting Posts
`password_verify` вызов возвращает false для правильного пароля Создание темы октопресса из темы wordpress Получите ошибку при использовании skyscanner Api из расчета полет в php laravel – привязка к пользовательским шрифтам Сортировка массива многодисковых массивов на более, чем один «столбец» (ключ) с заданными параметрами сортировки PHP разбивает массивы на группы на основе равных значений как сделать этот регистр preg_match незаметным? Как рассчитать среднее значение по рейтинговой системе? как отправлять push-уведомления на iphone с помощью fcm (firebase console) в PHP? Prestashop Web-сервис для возвращения JSON Что такое бит в условиях неспециалиста? Laravel 4 – включая «частичный» вид в представлении (без использования шаблона Blade) Форма Jquery / Ajax Почтовые данные не работают phpDoc @var для составного оператора отображается неправильно Как изменить HTTP-ответ и показать сообщение об ошибке, когда исключение происходит в деструкторе?

Как сделать регистр поиска в Xpath нечувствительным

В настоящее время я делаю xpath-поиск, у меня есть поиск, но мне нужно сделать регистр нечувствительным. Файл xml, который я использую, – это 1.0, который из моего исследования означает, что я должен использовать какую-то вещь, называемую функцией перевода, но я не уверен, как это сделать.

Вот мой файл поиска:

$holidayDoc = simplexml_load_file('holidays.xml'); // fetch data from form $txtSearch = $_GET['txtSearch']; $qry = "//channel/item[contains(.,\"$txtSearch\")]"; $holidays = $holidayDoc->xpath($qry); // do the xpath query // now loop through all the students echo "Showing title search results for $txtSearch"; foreach ($holidays as $holiday) { echo "<p><a href=\"{$holiday->link}\">{$holiday->title}</a></p> <p><small>$holiday->pubDate</small></p>"; 

Любая помощь будет с благодарностью благодарна.

XPath 1.0:

 $qry = "//channel/item[contains( translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), translate($search, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]" 

XPath 2.0:

 $qry = "//channel/item[lower-case(.) = lower-case($search)]" 

Оба заменят весь верхний регистр на нижний.

Технически, чтобы сделать случайное слепое сравнение, вы должны использовать сортировку в случайном порядке, если только ваш текст не является английским; нормализация обоих операндов в верхний регистр или нижний регистр не дает правильного результата при любых обстоятельствах. К сожалению, имена сопоставлений (в XPath 2.0) не стандартизированы, поэтому вы должны посмотреть в документации по продукту, чтобы узнать, какие сопоставления доступны.

Принимаемый в настоящее время ответ ошибочен – потому что ничто не гарантирует, что второй аргумент contains() уже преобразован в нижний регистр .

Кроме того, он использует '$search' – и это буквально строка "$search" – не переменная $search .

Вот правильное решение :

 //channel/item [contains(translate(., 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate($txtSearch, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') ) ] 

Соответствующее выражение XPath 2.0 :

 //channel/item[contains(lower-case(.), lower-case($txtSearch))] 

Обновление :

Исходя из этого решения, @alain.janinm исправил свой ответ.

Нечувствительный к регистру поиск может использоваться с использованием функции matches

 $qry = "//string[text() [matches(.,'^stringImTryingToFind$','i')]]" 

//string[text() [matches(.,'^OK$','i')]] разделе запроса использует регулярные выражения (REGEX) для определения соответствия.