FLWOR是XQuery核心结构,含for(迭代驱动)、let(变量绑定)、where(条件过滤)、order by(排序)、return(结果生成)五部分,声明式组合实现XML数据的查询、计算、筛选、排序与构造。
FLWOR 是 XQuery 的核心结构,代表 for、let、where、order by、return 五个关键词。它不是命令顺序,而是声明式逻辑组合——类似 SQL 的 SELECT-FROM-WHERE-ORDER BY,但更灵活,支持变量绑定、多层迭代和 XML 构造。
用于定义迭代变量,每次取输入序列中的一项,绑定给变量供后续使用。
for 子句,它是 FLWOR 的驱动入口doc("books.xml")/books/book)、函数结果或字面量序列for 实现笛卡尔积,例如:for $a in /store/item
for $b in /store/discount
不改变迭代次数,只做一次性赋值,常用于简化复杂表达式或避免重复计算。
let $price := $book/price * 0.9
let $i as xs:integer
:= 100
对当前迭代项进行布尔判断,只保留满足条件的项进入 return 阶段。
$var/xxx op value 形式,支持比较(=, !=, >, )、逻辑(and, or, not())等
where $b/price > 20 and $b/stock > 0
对最终参与 return 的项按指定表达式排序,默认升序,加 descending 可降序。
order by $b/year, $b/title descending
order by $b/price cast as xs:decimal
每个通过 where 的迭代项执行一次 return 表达式,结果合并为一个序列。
$b/title/text())、XML 片段(如 - {$b/title}
)或构造元素{ $b/price * 0.9 } 会求值并插入内容return element book { $b/title, $b/author }
基本上就这些。FLWOR 不复杂但容易忽略变量作用域和执行时机——let 是一次赋值,for 是逐项驱动,where 是逐项筛选,return 是逐项产出。组合起来,就能干净地查、算、筛、排、构 XML 数据。