XQuery嵌套返回

时间:2013-04-10 14:43:45

标签: xml xml-parsing xquery

我不太明白如何在返回中使用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>

但是根据我写的代码,我得到了错误Undefined variable $ b。我想知道是否有人能告诉我哪里出错了。谢谢! 这是我的代码:

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

1 个答案:

答案 0 :(得分:5)

问题是<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文本节点。这就是查询处理器抱怨未定义变量的原因。