Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XQuery映射:将具有相同键的值附加到现有映射_Xml_Xpath_Xquery_Exist Db - Fatal编程技术网

Xml XQuery映射:将具有相同键的值附加到现有映射

Xml XQuery映射:将具有相同键的值附加到现有映射,xml,xpath,xquery,exist-db,Xml,Xpath,Xquery,Exist Db,我有这些地图,它们是根据另一个查询构建的: let $my_maps := ( map { "book_id": "id_1", "title": "Some title", "author": "Some author", "date":

我有这些地图,它们是根据另一个查询构建的:

let $my_maps :=
    (
        map {
            "book_id": "id_1",
            "title": "Some title",
            "author": "Some author",
            "date": "Some dates"
        },
        map {
            "book_id": "id_2",
            "title": "Some title",
            "author": "Some author",
            "date": "Some dates"
        }
    )
我有一个XML文件:

Ongoin结果:


但结果是一样的。顺便说一句,我使用eXsit,我没有看到任何提到map{'duplicates':'combine'}的地方,所以我不确定他们是否允许这样做…

听起来好像你只是想

for $map in $my_maps
let $books := collection("path_to_my_collection")/book[@xml:id = $map?book_id]
return map:put($map, 'text', $books ! (.//introduction | .//notes))

这将在输入的每个映射中放入一个文本项,如果没有匹配的书籍,则该值可能是一个空序列。

听起来好像您只是想

for $map in $my_maps
let $books := collection("path_to_my_collection")/book[@xml:id = $map?book_id]
return map:put($map, 'text', $books ! (.//introduction | .//notes))

这将在输入的每个映射中放入一个文本项,如果没有匹配的书籍,则该值可能是一个空序列。

您从一个映射序列开始,并想要一个映射序列作为结果?还是单个映射?这对我来说并不重要,我只想按id对所有“文本”进行分组。反问:假设我可以有数百个映射,并且在我的最终返回中,我想从这些映射构造一些xml输出,那么什么对查询性能最有利?要让一个映射包含数百个嵌套映射,还是要让数百个“小”映射?我对exist db了解不多,因此我不会对性能进行任何猜测。您从一系列映射开始,然后想要一系列映射作为结果?还是单个映射?这对我来说并不重要,我只想按id对所有“文本”进行分组。反问:假设我可以有数百个映射,并且在我的最终返回中,我想从这些映射构造一些xml输出,那么什么对查询性能最有利?要一个映射包含数百个嵌套映射,还是要有数百个“小”映射?我对exist db不太了解,所以我不会对性能进行任何猜测。它工作起来很有魅力!非常感谢你!它就像一个符咒!非常感谢你!
1
map {
    "book_id": "id_1",
    "title": "Some title",
    "author": "Some author",
    "date": "Some dates",
    "text": <introduction>texte of introduction</introduction>
}
2
map {
    "book_id": "id_1",
    "title": "Some title",
    "author": "Some author",
    "date": "Some dates",
    "text": <notes>texte of notes</notes>
}
1
map {
    "book_id": "id_1",
    "title": "Some title",
    "author": "Some author",
    "date": "Some dates",
    "text": (<introduction>texte of introduction</introduction>, <notes>texte of notes</notes>)
}
let $grouped_map := 
    (
        for $id in $my_maps?book_id
        
        for $book_part in collection("path_to_my_collection")/book[@xml:id = $id]//(introduction | notes)
     
        return 
            map:merge((
                $my_maps[?book_id = $id],
                map:entry("text", $book_part),
                map {'duplicates' : 'combine'}
                ))
    )

return
 $grouped_map
for $map in $my_maps
let $books := collection("path_to_my_collection")/book[@xml:id = $map?book_id]
return map:put($map, 'text', $books ! (.//introduction | .//notes))