1

在 DBXML 中使用 XQuery 我想根据设置为特定值的多个节点确定某些元素的优先级。

我希望能够在顶部显示其中的三个元素,而在下面显示其余元素。

<properties>
   <property>
       <zip_code>5550</zip_code>
       <agency>ABC</agency>
   </property>
   <property>
       <zip_code>5550</zip_code>
       <agency>DEF</agency>
   </property>
   <property>
       <zip_code>5550</zip_code>
       <agency>DEF</agency>
   </property>
   <property>
       <zip_code>XYZ</zip_code>
       <agency>ABC</agency>
   </property>
</properties>

我们在属性搜索页面中获取此 XML。真正的搜索结果将有数百条记录,但我们只将前 10 条记录显示在第一页上。在这里,我们需要应用一个排序顺序,该顺序将显示“ABC”机构的属性,然后始终在顶部显示邮政编码“XYZ”。如果整个结果集没有这些机构,我们可以按正常排序顺序显示它们。

4

1 回答 1

3

XQuery 的 flwor-expressions know order by,它可以按任意值排序,也可以计算。使用一个表达式来确定某个产品是否是“顶级产品”(产生布尔值)。

然后拆分结果序列以仅突出显示一些结果并限制为总结果。

let $highlighted := 3
let $total := 10
let $sorted := 
  for $p in //property
  (: order by highlighting predicate :)
  order by $p/agency eq "ABC" and $p/zip_code eq "XYZ" descending
  return $p
return (
  (: first $highlighted elements as defined by predicates above :)
  $sorted[ position() = (1 to $highlighted) ],
  (: the other elements, `/.` forces sorting back to document order :)
  $sorted[ position() = ($highlighted + 1 to $total) ]/.
)

布尔表达式可以变得任意复杂,以便在顶级产品上更精确,例如限制电视或定义一些最低价格。

于 2013-01-09T15:40:11.683 回答