XQuery, как получить весь документ XML с помощью запроса WHERE
У меня есть XML db только с одной коллекцией (контейнером), и я не знаю имен документов. Как получить весь документ XML из db, который соответствует предложению WHERE?
<root>
<node1>
<node2>
<node3>My Content</node2>
</node2>
</node1>
<root>
Когда у меня есть вопросы
query 'collection("data1.dbxml")/root/node1/node2[node3 = "My Content"]/string()'
он возвращает контент с этого узла3
'My Content'
а также
query 'collection("data1.dbxml")/root/ode1/node2/node3'
возвращает 2 внутренних узла с содержимым
<node2><node3>My Content</node3></node2>
Но как получить весь документ, который соответствует этому предложению WHERE (например, SELECT * FROM data2.dbxml WHERE node3='My Content'?
2 ответа
Просто используйте предикат, как вы делали в первом примере:
collection("data1.dbxml")/root[node1/node2/node3 = "My Content"]
Вы можете думать о предикате в XQuery как о ГДЕ в SQL, а SELECT-часть - это все, что было раньше.
Другое решение... после изучения:)
query 'for $x in collection("data1.dbxml")
where $x/root/node1/node2/node3 = "My Content"
return $x'
или когда мы знаем глубину узла в XMLdoc и имя узла
query 'for $x in collection("data1.dbxml")
where $x/*/*/*/node3 = "My Content"
return $x'
спасибо W3Schools