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 道经典语法练习题(带答案)立刻发你练手吗?随时说一声~

相关推荐
身如柳絮随风扬3 小时前
Java中的CAS机制详解
java·开发语言
qq_192779874 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
风筝在晴天搁浅4 小时前
hot100 78.子集
java·算法
u0109272714 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊4 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
故事和你915 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
tudficdew5 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
sjjhd6525 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
Configure-Handler6 小时前
buildroot System configuration
java·服务器·数据库
2301_821369616 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python