在XQuery中结合两个for循环和并集结果

问题描述

比方说我们有这个文件

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)c ollection1.xml可以包含许多标题,而mydoc1.xml只能包含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>
  }
)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...