Я использую BaseX XML Database.Рассмотрим 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>
Я пытаюсь выполнить поиск с различными вариантами, такими как: поиск только по книгам, только по автомобилям, по книгам и по машинам.
Я пытаюсь использовать переменную xml в своем xquery для получения результатов поиска на основе требуемого типа поиска.
Пример значений переменных: - <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?Есть ли лучший способ сделать это?Кроме того, xquery должен возвращать как автомобили, так и записи, если переменная xml имеет дочерние узлы обоих типов.
Спасибо, Sony