gpt4 book ai didi

xpath - 如果 XQuery 包含给定关键字,则返回文本节点

转载 作者:行者123 更新时间:2023-12-03 15:35:21 25 4
gpt4 key购买 nike

我的 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> 的元素作为一个 child 。然后,对于所有此类条目,如果标题包含给定关键字(例如链接),则返回标题。因此,在我的示例 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 而不是预期的结果“链接 ISBN”。这是为什么?

最佳答案

I want to write an xquery which will find all elements which have as a child. Then, for all such entries return the title if the title contains a given keyword (such as 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

关于xpath - 如果 XQuery 包含给定关键字,则返回文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com