我正在使用 BaseX XML 数据库。考虑数据库中的一个 xml 文档,如下所示:
<entries>
<book-entry>
<book>Book 1</book>
<author>Author 1 ABC</author>
<title>Title 1</title>
</book-entry>
<car-entry>
<car>Car 1</car>
<model>Model 1</model>
<price>Price 1 ABC</price>
</car-entry>
</entries>
我正在尝试使用不同的选项进行搜索,例如:仅搜索书籍、仅汽车、书籍和汽车。
我试图在我的 xquery 中使用 xml 变量来根据所需的搜索类型返回搜索结果。
示例变量值: - <types><type>book-entry</type></types>
:仅搜索图书条目 - :仅<types><type>car-entry</type></types>
搜索汽车条目 - <types><type>book-entry</type><type>car-entry</type></types>
:搜索图书条目和汽车条目
XQuery 示例:
declare variable $doc_name as xs:string external; (: name of xml document :)
declare variable $search_types as xs:anyAtomicType external; (: one of the example variable values shown above :)
declare variable $search_key as xs:string external; (: eg: ABC :)
for $entry in doc($doc_name)/entries[*[exists($search_types/types/type/text() = node-name(.)) and .//text() contains text $search_key]]
return $entry
上面的查询返回包含文本子节点 ABC 的汽车和书籍条目,尽管我传递<types><type>car-entry</type></types>
给 $search_types。
如何使用 xml 变量限制搜索?有没有更好的方法来做到这一点?此外,如果 xml 变量具有两种类型的子节点,则 xquery 必须同时返回汽车和条目。
谢谢,索尼