下面是的XQuery 1.0的語法的語法規則,如從XQuery 1.0 w3c spec採取:
[31] Expr ::= ExprSingle ("," ExprSingle)*
[32] ExprSingle ::= FLWORExpr
| QuantifiedExpr
| TypeswitchExpr
| IfExpr
| OrExpr
[33] FLWORExpr ::= (ForClause | LetClause)+ WhereClause?
OrderByClause? "return" ExprSingle
可以清楚地看出,return
令牌(關鍵字)必須遵循由單個表達。
然而,擺脫div
元素你有:
<body>
<h1>Nobel prize winners</h1>
{
for $subject in
distinct-values(doc("nobel.xml")//subject)
let $sn := $subject
return
<h2>{$sn}</h2>
<ul>
{for $row in doc("nobel.xml")/nobel/row
let $name := $row/winner/text()
let $year := $row/yr/text()
where $row/subject/text()=$subject
order by $year
return
<li> ({$year} {$name} </li>
}
</ul>
}
</body>
我們可以清楚地看到,return
關鍵字後面沒有一個單一的表達,通過的XQuery 1.0定義語法。
解:清楚地指定跟隨return
關鍵字元素的序列,如序列:
<body>
<h1>Nobel prize winners</h1>
{
for $subject in
distinct-values(doc("nobel.xml")//subject)
let $sn := $subject
return
(
<h2>{$sn}</h2>,
<ul>
{for $row in doc("nobel.xml")/nobel/row
let $name := $row/winner/text()
let $year := $row/yr/text()
where $row/subject/text()=$subject
order by $year
return
<li> ({$year} {$name} </li>
}
</ul>
)
}
</body>
通知,繼return
元件的序列現在由括號包圍,並且所述序列中的元素由逗號分隔。現在
,當這個nobel.xml
文件執行上面的XQuery代碼:
<nobel>
<row>
<subject>Lit</subject>
<winner>Solzhenitsin</winner>
<yr>1969</yr>
</row>
</nobel>
想要的,正確的結果產生:
<body>
<h1>Nobel prize winners</h1>
<h2>Lit</h2>
<ul>
<li> (1969Solzhenitsin</li>
</ul>
</body>
問得好,+1。請參閱我的答案以獲得解釋和完整解:) – 2011-02-15 04:39:02