Игнорирование соответствия регистров в XQuery - PullRequest
3 голосов
/ 29 декабря 2010

Первоначально я написал простой скрипт XQuery:

$mediaNodes := doc('/db/portfolio/media_data_101109.xml'),
$query := concat('$mediaNodes//media[contains(@product,"',$product,'")'

По сути, сначала нужно получить xml-файл для записей мультимедиа. Затем я построил запрос, который выполняет поиск по всем mediaNodes (элементам файла xml) и сопоставляет атрибут @product с тем, что пользователь предоставил в браузере, и я использовал аргумент «содержать», поэтому нет необходимости делать точные согласование.

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

Я выполнил поиск в Интернете и обнаружил функцию в нижнем регистре и соответственно изменил свой код:

$query := concat('$mediaNodes//media[contains(lower-case(@product),"',lower-case($product),'")',

но это не работает, если я выполню запрос, произойдет переполнение кучи. Запрос, полученный после запуска product = wborc, выглядит следующим образом:

$mediaNodes//media[contains(lower-case(@product),"wborc")]

Может ли кто-нибудь мне немного помочь? Я не уверен, делаю ли я синтаксическую ошибку или логическую ошибку. Заранее спасибо.

1 Ответ

2 голосов
/ 29 декабря 2010

Используйте

concat('$vmediaNodes//media
        [contains(lower-case(@product),','lower-case("',$vProduct,'"))]')
...