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))