5

我不太明白如何使用嵌套在返回中的 for 。例如,给定

<book year="1994">
    <title>TCP/IP Illustrated</title>
    <author><last>Stevens</last><first>W.</first></author>
    <publisher>Addison-Wesley</publisher>
    <price>65.95</price>
</book>

<book year="1992">
    <title>Advanced Programming in the Unix environment</title>
    <author><last>Stevens</last><first>W.</first></author>
    <publisher>Addison-Wesley</publisher>
    <price>65.95</price>
</book>

我想返回以下内容:

<price group = "65.95">
    <book year = "1994">
    <book year = "1992">
</price>

但是使用我编写的代码,我收到错误未定义变量 $b。我想知道是否有人可以告诉我我哪里出错了。谢谢!这是我的代码:

    for $p in distinct-values(//price)
return<price group ="{$p}">
(
  for $b in //book[price = $p]
    return <book year = "{$b/@year}"></book>
)
</price>
4

1 回答 1

6

问题是<price group="...元素内的所有内容都被解释为 XML。如果您希望它作为 XQuery 运行,则必须将其包装在大括号中{...}

for $p in distinct-values(//price)
return <price group="{$p}">{
  for $b in //book[price = $p]
  return <book year="{$b/@year}"/>
}</price>

在您的代码中,只有代码{$b/@year}被解释为 XQuery,而封闭的 FLWOR 表达式是一个 XML 文本节点。这就是查询处理器抱怨未定义变量的原因。

于 2013-04-10T15:29:41.350 回答