XQuery:如何快速比较来自不同XML文件的2个id?

时间:2012-12-23 18:07:49

标签: xml xquery

所以我有这两个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

1 个答案:

答案 0 :(得分:1)

  

我要做的第一件事就是只保留有用数据的ID。但是之后   我想做一个for语句,快速找到相同的ingr   id(唯一)而不是扫描文件的任何83882个。

我不相信在标准XQuery中可以采用“更快”的方式实现这一点 - 下面的查询仍然具有O(N * M)的最差时间复杂度,其中N和{{1分别是两个XML文档中Mdata元素的数量。

在XSLT中,可以在任何节点上定义一个键(索引),该节点是其他节点的函数,并且该索引在使用时可以产生接近O(1)的快速搜索。

使用

ingr