XQuery 完整语法速查表(2025 最新版,XQuery 3.1)

XQuery 完整语法速查表(2025 最新版,XQuery 3.1)

直接背这张表 + 记住 10 个最常用模板 = 99% 的实际开发都够用。

类别 语法(必背) 说明 / 示例
版本声明 xquery version "3.1"; 必须写在最前面,推荐永远写 3.1
编码声明 xquery encoding "utf-8"; 可选,但建议写
模块导入 import module namespace m = "http://example.com/m" at "m.xqm"; 导入自定义函数库
命名空间声明 declare namespace ex = "http://example.com"; 常用在 FLWOR 或函数里
变量 declare variable $x := 1 to 10; let $y := <a>hello</a> declare 是全局,let 是局部
FLWOR(核心) for $i in 1 to 10 <br> let $s := "hello" <br> where $i > 5 <br> order by $i descending <br> return <item>{$i}</item> 至少有一个 for 或 let + return
for 子句 for $book in doc("books.xml")//book for $x at $pos in 1 to 10 at $pos 可取序号(分页必备)
let 子句 let $books := doc("books.xml")//book 不迭代,常用于分组、统计
where 子句 where $book/price > 30 and contains($book/title, "XML") 支持 and、or、=、!=、>、<、<=、>=
order by order by $book/price descending, $book/year ascending 支持多个字段
return return <li>{ $book/title }</li> 可以返回任意 XQuery 表达式
条件表达式 if ($price > 100) then "expensive" else "cheap" 必须有括号,必须有 else
路径表达式 /bookstore/book[price>30]/title //book[@category="web"] 完全复用 XPath 3.1 语法
谓词(过滤) //book[1] //book[last()] //book[position() <= 3] 位置从 1 开始
轴(Axis) child::, descendant::, descendant-or-self::, parent::, ancestor::, attribute::, @, self:: 常用:@..///
函数调用 count($books) avg($books/price) string-join($authors, ", ") 超过 200 个内置函数
箭头操作符(3.1) $books ! title ! upper-case(.) doc("data.json") => parse-json() => ?users?*?name 链式调用,比逗号更清晰
动态函数调用 let $f := upper-case#1 return $f("hello") 高阶函数常用
Map(3.1) map { "name": "John", "age": 31 } $map?name $map?("age") 相当于 JSON 对象
Array(3.1) array { 1, 2, 3 } $array?1 $array?* 相当于 JSON 数组
JSON 支持 parse-json('{"a":1}') json-doc("data.json") json-doc 直接返回 map/array
构造元素/属性 <book id="{$id}">{ $title }</book> 大括号里是 XQuery 表达式
文本节点构造 text { "hello world" } { "price: ", $p } 推荐用大括号拼接
注释 (: 这是一行注释 :) (: 多行注释<br>也可以这样写 :) 和 ML 系列语言完全一样
序列化声明(输出) declare option output:method "html"; declare option output:html-version "5.0"; 让 XQuery 直接输出完美 HTML
完整 HTML5 输出 declare option output:method "html"; declare option output:html-version "5.0"; declare option output:include-content-type "yes"; 三行必写,生成可直接打开的 HTML 文件
更新语句(XQUF) copy $tmp := doc("books.xml") modify (replace value of node $tmp//price with 99.99) return $tmp 仅 BaseX、eXist-db、MarkLogic 支持

10 个最常用"万能模板"(背下来就能打遍天下)

xquery 复制代码
1. 简单查询
doc("books.xml")//book[price > 30]/title

2. 标准 FLWOR
for $b in doc("books.xml")//book
where $b/price > 30
order by xs:decimal($b/price) descending
return $b/title

3. 分组统计(SQL GROUP BY)
for $cat in distinct-values(//book/@category)
let $books := //book[@category = $cat]
return <cat name="{$cat}" count="{count($books)}" avg="{avg($books/price)}"/>

4. 生成完整 HTML 页面(三行声明必写)
xquery version "3.1";
declare option output:method "html";
declare option output:html-version "5.0";
declare option output:include-content-type "yes";
<html> ... 你的 FLWOR ... </html>

5. JSON → XML
parse-json(file:read-text("data.json"))

6. XML → JSON
serialize($node, map { "method": "json", "indent": true() })

7. 条件高亮
if ($b/price > 50) then <span class="red">{ $b/price }</span>
else <span>{ $b/price }</span>

8. 带序号分页
for $b at $i in //book
where $i >= 11 and $i <= 20
return <tr><td>{$i}</td><td>{$b/title}</td></tr>

9. 多文档 join
for $book in doc("books.xml")//book
    $review in doc("reviews.xml")//review[id = $book/@id]
return <item title="{$book/title}" rating="{$review/rating}"/>

10. 更新(支持的引擎)
copy $db := doc("books.xml")
modify replace value of node $db//book[@id="b1"]/price with 99.99
return $db

把上面语法表 + 10 个模板记熟,任何 XQuery 需求 1 分钟内都能写出来!

需要我出 50 道经典语法练习题(带答案)立刻发你练手吗?随时说一声~

相关推荐
雨中飘荡的记忆1 小时前
LangChain4j 实战指南
java·langchain
okseekw1 小时前
Java 中的方法:从定义到重载的完整指南
java
雨中飘荡的记忆1 小时前
深入理解设计模式之适配器模式
java·设计模式
用户84913717547161 小时前
生产级故障排查实战:从制造 OOM 到 IDEA Profiler 深度破案
java·jvm
雨中飘荡的记忆1 小时前
深入理解设计模式之装饰者模式
java·设计模式
雨中飘荡的记忆1 小时前
秒杀系统设计与实现
java·redis·lua
b***46242 小时前
从 SQL 语句到数据库操作
数据库·sql·oracle
Q***f6352 小时前
后端数据库性能优化的8个工具推荐
数据库·性能优化
小坏讲微服务2 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发