2011-12-20 3 views
2

Я хотел бы знать, как вы могли бы запросить для одного конкретного языка, это связанный XML-фрагмент:XQuery - Как использовать уравнение (=) на группу значений

(...) 
<Guide guideID = '5' gname = 'Dexter Schneider'> 
<Lang lname = "{'Spanish' , 'German' , 'English'}"/> 
</Guide> 
(...) 

Я попытался с:

element Result { 
//Guide[Lang/@lname = 'German'] 
} 

, но я получаю результаты, когда «немецкий язык» является единственным языком в «lname». Я подозреваю, что это либо из-за плохого XML-документа (никаких предупреждений от XQuisitor о синтаксисе), либо потому, что знак «=» может сравнивать только одну точную строку с другой. Может ли кто-нибудь пролить свет на это и показать мне, как будет выглядеть правильный запрос? Благодаря!

ответ

4

В вашем конкретном случае, вы можете использовать //Guide[contains(Lang/@lname, 'German')].

Более общее значение, значение вашего атрибута - это строка, а не массив. Для вашего варианта использования вы можете использовать последовательности, но сначала вам нужно построить последовательность.

Например, если у вас есть XML подобное:

(...) 
<Guide guideID = '5' gname = 'Dexter Schneider'> 
<Lang lname = "Spanish German English"/> 
</Guide> 
(...) 

Вы можете использовать следующий XPath 2.0 синтаксис (XQuery совместимый):

//Guide['German' = tokenize(Lang/@lname,' ') ] 

tokenize функция создает последовательность и = проверяет, что вы хотите.

+0

"Содержит" функция я после, спасибо! –

2

В зависимости от вашего XQuery двигателя, это XPath должно работать:

element Result { 
//Guide[contains(Lang/@lname, 'German')] 
} 
Смежные вопросы