我的xml文件的测试样本如下所示:
的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>
现在,我想写一个xquery,它会找到<entry>
个孩子的<libx:libapp>
个元素。然后,对于所有这样的条目,如果标题包含给定的关键字(例如链接),则返回标题。因此,在我的示例xml文档中,xquery应返回“Link ISBN”。
我的示例xquery如下所示:
samplequery.xq(此处doc_name是上面显示的xml文件,libapp_matchkey是关键字,例如'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()
此xquery返回null而不是预期的结果'Link ISBN'。那是为什么?
答案 0 :(得分:7)
我想写一个xquery 找到所有的元素 作为一个孩子。然后,为 所有这些条目都返回标题if 标题包含给定的关键字 (例如Link)。
只需使用:
/*/entry[libx:libapp]/title[contains(.,'Link')]/text()
在XQuery中包装此XPath表达式:
declare namespace libx='http://libx.org/xml/libx2';
/*/entry[libx:libapp]/title[contains(.,'Link')]/text()
应用于提供的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>
产生了想要的正确结果:
Link ISBN