我不太明白如何在返回中使用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>
答案 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文本节点。这就是查询处理器抱怨未定义变量的原因。