在xQuery中使用函数声明

时间:2016-01-19 19:42:13

标签: xml xquery function-declaration

我试图将一个元素列表传递给函数,并且从该元素中我只想提取一部分(取决于卡路里的数量)。

在这里你可以看到我的代码:

declare function local:calories($val as element(), $max as xs:integer) as element() {
let $doc := $val//food
where $doc/calories > $val
return $doc };

let $doc := doc("calorie.xml")/breakfast_menu
return local:calories($doc, 610)/name

这是XML

<breakfast_menu>
<food>
  <name>Belgian Waffles</name>
  <price>$5.95</price>
  <description>Our famous Belgian Waffles with plenty of real maple syrup</description>
  <calories>650</calories>
</food>
<food>
  <name>French Toast</name>
  <price>$4.50</price>
  <description>Thick slices made from our homemade sourdough bread</description>
  <calories>600</calories>
</food>
<food>
  <name>Homestyle Breakfast</name>
  <price>$6.95</price>
  <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
  <calories>950</calories>
</food>
</breakfast_menu>

我希望看到的是:

<name>French Toast</name>
<name>Homestyle Breakfast</name>

有人能告诉我我缺少的东西吗?

1 个答案:

答案 0 :(得分:0)

有几个问题。 1)要使用where子句,您需要一个有效的FLWOR语句 - 在这种情况下,您缺少for。 2)比较中使用了不正确的值:

for $doc in $val//food
where $doc/calories > $max
return $doc

但是,您也可以仅使用XPath选择相同的节点:

$val//food[calories > $max]