所以我有这两个XML文件:
datas.xml
<datas>
<data id="1"><place>Mu</place></data>
<data id="2"><place>Atlantis</place></data>
...
<data id="28492"><place>Mu</place></data>
</datas>
ingrs.xml
<ingrs>
<ingr id="1">...</ingr>
<ingr id="2">...</ingr>
...
<ingr id="83882">...</ingr>
</ingrs>
我要做的第一件事就是只保留有用数据的ID。但后来我想做一个for语句,快速找到具有相同id(唯一)的ingr而不是扫描该文件的任何83882 ingrs。
let $ids := //data[./place = 'Mu']/@id return
for $i in //ingr
where() (: what to do here ? Something like $i/@id = $ids :)
return $i
答案 0 :(得分:1)
我要做的第一件事就是只保留有用数据的ID。但是之后 我想做一个for语句,快速找到相同的ingr
id
(唯一)而不是扫描文件的任何83882个。
我不相信在标准XQuery中可以采用“更快”的方式实现这一点 - 下面的查询仍然具有O(N * M)的最差时间复杂度,其中N
和{{1分别是两个XML文档中M
和data
元素的数量。
在XSLT中,可以在任何节点上定义一个键(索引),该节点是其他节点的函数,并且该索引在使用时可以产生接近O(1)的快速搜索。
使用强>:
ingr