donné un échantillon de test de mon fichier xml est illustré ci-dessous:XQuery noeud texte de retour si elle contient mot-clé
test.xml
<feed>
<entry>
<title>Link ISBN</title>
<libx:libapp xmlns:libx="http://libx.org/xml/libx2" />
</entry>
<entry>
<title>Link Something</title>
<libx:module xmlns:libx="http://libx.org/xml/libx2" />
</entry>
</feed>
Maintenant, je veux écrire un XQuery qui trouvera tous <entry>
éléments qui ont <libx:libapp>
comme un enfant. Ensuite, pour toutes ces entrées, renvoyez le titre si le titre contient un mot clé donné (tel que Lien). Donc, dans mon document XML, le xquery devrait renvoyer "Link ISBN".
Mon échantillon XQuery est illustré ci-dessous:
samplequery.xq (ici DOC_NAME est le fichier xml ci-dessus et libapp_matchkey est un mot clé comme 'lien')
declare namespace libx='http://libx.org/xml/libx2';
declare variable $doc_name as xs:string external;
declare variable $libpp_matchkey as xs:string external;
let $feeds_doc := doc($doc_name)
for $entry in $feeds_doc/feed/entry
(: test whether entry has libx:libapp child and has "Link" in its title child :)
where ($entry/libx:libapp and $entry/title/text()[contains(.,$libapp_matchkey)])
return $entry/title/text()
Cette XQuery retourne null au lieu du résultat attendu 'Link ISBN'. Pourquoi donc?
J'ai remplacé 'food_doc' $ déclaration'/', corrigé la' $ libapp_matchkey' faute de frappe, et runned avec succès avec votre échantillon d'entrée . –
Bonne question, +1. Voir ma réponse pour une solution one-liner courte et naturelle :) –