在 XQuery 中组合两个 for 循环和联合结果
Combine two for loops and union results in XQuery
假设我们有这个文件夹
not_my_files
collections
collection1.xml
collection2.xml
collection3.xml
etc...
my_files
my_documents
mydoc1.xml
mydoc2.xml
mydoc3.xml
etc...
有xml个文件的结构
collection1.xml(collection2.xml、collection3.xml 等结构相同...)
<collection xml:id="name_of_collection_1">
<ref id="id_of_ref_1">
<title>This is title 1 of first document in this collection</title>
</ref>
<ref id="id_of_ref_2">
<title>This is title 2 of second document in this collection</title>
</ref>
</collection>
mydoc1.xml(mydoc2.xml、mydoc3.xml 等结构相同...)
<mydoc id="my_doc_id_1">
<tag1>
<tag2>
<reference_tag>
<my_title>This is title 1 of my documents</my_title>
</reference_tag>
</tag2>
</tag1>
</mydoc>
因此:1) xml 不同文件夹中的文件具有不同的结构 和 2) collection1.xml 可以包含许多标题和mydoc1.xml time.
只能包含 1 个标题
我想从collections/collection1.xml(等)和my_documents/mydoc1.xml(等)中获取所有标题。
这是想要的结果:
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
<doc>
<folder>Not my files</folder>
<title>This is title 2 of second document in this collection</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
我的 当前 XQuery:
xquery version "3.1";
for $doc_not_my_files in collection("/not_my_files/collections")
let $folder_not_my_files := "Not my files"
for $ref in $doc_not_my_files//ref
let $title_not_my_files := $ref/title/text()
for $doc_my_files in collection("/my_files/my_documents")
let $folder_my_files := "My files"
let $title_my_files := $doc_my_files//reference_tag/my_title/text()
return
if ($folder_my_files="My files")
then
<doc>
<folder>{$folder_my_files}</folder>
<title>{$title_my_files}</title>
</doc>
else
<doc>
<folder>{$folder_not_my_files}</folder>
<title>{$title_not_my_files}</title>
</doc>
我的当前结果:
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
**etc... 1000 times**
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
**etc... another 1000 times**
所以,我在 XQuery 中寻找某种 SQL“UNION”替代方案...
我觉得我有一些基本的愚蠢问题,但我是 XQuery 的新手,所以请原谅我:)
它可能适用于
for-each-pair(
collection("/my_files/my_documents"),
collection("/not_my_files/collections"),
function($doc, $col) {
$doc//reference_tag/my_title/text() ! <doc>
<folder>My files</folder>
<title>{.}</title>
</doc>,
$col//ref/title/text() ! <doc>
<folder>Not my files</folder>
<title>{.}</title>
</doc>
}
)
假设我们有这个文件夹
not_my_files
collections
collection1.xml
collection2.xml
collection3.xml
etc...
my_files
my_documents
mydoc1.xml
mydoc2.xml
mydoc3.xml
etc...
有xml个文件的结构
collection1.xml(collection2.xml、collection3.xml 等结构相同...)
<collection xml:id="name_of_collection_1">
<ref id="id_of_ref_1">
<title>This is title 1 of first document in this collection</title>
</ref>
<ref id="id_of_ref_2">
<title>This is title 2 of second document in this collection</title>
</ref>
</collection>
mydoc1.xml(mydoc2.xml、mydoc3.xml 等结构相同...)
<mydoc id="my_doc_id_1">
<tag1>
<tag2>
<reference_tag>
<my_title>This is title 1 of my documents</my_title>
</reference_tag>
</tag2>
</tag1>
</mydoc>
因此:1) xml 不同文件夹中的文件具有不同的结构 和 2) collection1.xml 可以包含许多标题和mydoc1.xml time.
只能包含 1 个标题我想从collections/collection1.xml(等)和my_documents/mydoc1.xml(等)中获取所有标题。 这是想要的结果:
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
<doc>
<folder>Not my files</folder>
<title>This is title 2 of second document in this collection</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
我的 当前 XQuery:
xquery version "3.1";
for $doc_not_my_files in collection("/not_my_files/collections")
let $folder_not_my_files := "Not my files"
for $ref in $doc_not_my_files//ref
let $title_not_my_files := $ref/title/text()
for $doc_my_files in collection("/my_files/my_documents")
let $folder_my_files := "My files"
let $title_my_files := $doc_my_files//reference_tag/my_title/text()
return
if ($folder_my_files="My files")
then
<doc>
<folder>{$folder_my_files}</folder>
<title>{$title_my_files}</title>
</doc>
else
<doc>
<folder>{$folder_not_my_files}</folder>
<title>{$title_not_my_files}</title>
</doc>
我的当前结果:
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
<doc>
<folder>My files</folder>
<title>This is title 1 of my documents</title>
</doc>
**etc... 1000 times**
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
<doc>
<folder>Not my files</folder>
<title>This is title 1 of first document in this collection</title>
</doc>
**etc... another 1000 times**
所以,我在 XQuery 中寻找某种 SQL“UNION”替代方案... 我觉得我有一些基本的愚蠢问题,但我是 XQuery 的新手,所以请原谅我:)
它可能适用于
for-each-pair(
collection("/my_files/my_documents"),
collection("/not_my_files/collections"),
function($doc, $col) {
$doc//reference_tag/my_title/text() ! <doc>
<folder>My files</folder>
<title>{.}</title>
</doc>,
$col//ref/title/text() ! <doc>
<folder>Not my files</folder>
<title>{.}</title>
</doc>
}
)