我有两个元素列表,用于查询第三种类型的元素(在 eXist DB 中)。但是由于我只想要两个查询都找到的结果(即满足两组初始参数),所以我对这两个子结果进行了交集:
let $aList1 := for $elementB in $elementListB return //ElementA[ft:query(@referenceB, $elementB/@id)]
let $aList2 := for $elementC in $elementListC return //ElementA[ft:query(@referenceC, $elementC/@id)]
let $results := $aList1 intersect $aList2
问题是,我需要在起始列表中的每个元素上调用一个函数来获取一些额外的信息。通常我会做这样的事情:
let $aList1 := for $elementB in $elementListB
let $additionalInfo := additionalInfoFunction($elementB)
return
<wrapper>
<additionalInfo>{$additionalInfo}</additionalInfo>
{
//ElementA[ft:query(@referenceB, $elementB/@id)]
}
</wrapper>
但是,如果我这样做,我将无法执行交集,$aList1
因为$aList2
交集与引用而不是值一起使用。
我想像这样调用additionalInfoFunction
路口之后:
return for $result in $results
let $elementB := $elementListB[@id = $result/@referenceB]
let $additionalInfo := additionalInfoFunction($elementB)
return
<wrapper>
<additionalInfo>{$additionalInfo}</additionalInfo>
{
BLA BLA
}
</wrapper>
但这里的问题是,虽然$elementListB
只$elementListC
包含几个元素,$results
但可以包含数百个元素,这是一个问题,因为additionalInfoFunction
它相对昂贵。
这里有一些我看不到的聪明的解决方法吗?