2011-12-20 2 views
2

Je voudrais savoir comment vous pouvez interroger pour une langue spécifique, c'est un lié XML extrait:XQuery - Comment utiliser l'équation (=) sur un groupe de valeurs

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

J'ai essayé avec:

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

mais je n'ai que les résultats où "allemand" est la seule langue dans "lname". Je suppose que c'est soit à cause d'un mauvais document XML (pas d'avertissement de XQuisitor à propos de la syntaxe), soit parce que le signe "=" ne peut comparer qu'une chaîne exacte avec une autre. Quelqu'un pourrait-il nous éclairer à ce sujet et me montrer à quoi ressemblerait une requête appropriée? Merci!

Répondre

4

Dans votre cas spécifique, vous pouvez utiliser //Guide[contains(Lang/@lname, 'German')].

Plus généralement, la valeur de votre attribut est une chaîne et non un tableau. Pour votre cas d'utilisation, vous pouvez utiliser des séquences, mais vous devez d'abord créer la séquence.

Par exemple, si vous avez un XML comme ça:

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

Vous pouvez utiliser le XPath 2.0 syntaxe (XQuery conforme) suivante:

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

La fonction tokenize crée une séquence et = teste ce que vous voulez.

+0

"Contient" est la fonction que je suis après, merci! –

2

Selon votre moteur XQuery, ce XPath devrait fonctionner:

element Result { 
//Guide[contains(Lang/@lname, 'German')] 
} 
Questions connexes