Eine Testprobe meiner XML-Datei ist unten dargestellt:XQuery Rückkehr Textknoten, wenn es enthält bestimmtes Keyword
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>
Jetzt möchte ich eine xquery schreiben, die alle <entry>
finden Elemente, die <libx:libapp>
als Kind haben. Dann geben Sie für alle solche Einträge den Titel zurück, wenn der Titel ein bestimmtes Schlüsselwort enthält (z. B. Link). In meinem XML-Beispieldokument sollte die Xquery "Link ISBN" zurückgeben.
Meine Probe xquery ist unten dargestellt:
samplequery.xq (hier DOC_NAME ist die XML-Datei, die oben gezeigt und libapp_matchkey ist ein Schlüsselwort wie 'Link')
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()
Diese xquery kehrt null anstelle des erwarteten Ergebnisses 'Link ISBN'. Warum das?
I ersetzt haben '$ food_doc' Erklärung als'/', korrigiert, um die' $ libapp_matchkey' Tippfehler, und es erfolgreich mit dem Eingangsabtastwert runned . –
Gute Frage, +1. Siehe meine Antwort für eine kurze und natürliche One-Liner-Lösung :) –