XQuery 是声明式 XML 查询语言,核心为路径表达式(如 /bookstore/book)、FLWOR 表达式(for-where-order by-return)、条件构造(if-then-else)、命名空间声明及外部文档加载(doc()),强调结果而非过程。

XQuery 查询 XML 的核心是“用表达式描述你要什么”,而不是一步步告诉它怎么查。它不像编程语言那样写流程,更像 SQL——声明式、简洁、聚焦结果。
路径表达式:最直接的查询方式
就像文件系统里的路径,XQuery 用 / 和 // 定位节点:
-
/bookstore/book:从根开始,找下的直接子元素 -
//title:在整个文档任意层级找所有元素(不关心位置) -
/bookstore/book[1]/title/text():取第一个的标题文本内容 - 属性要用
@前缀,比如/bookstore/book/@category获取 category 属性值
FLWOR 表达式:处理复杂逻辑的主力
类似 SQL 的 SELECT-FROM-WHERE,适合过滤、排序、组合多组数据:
-
for $b in doc("books.xml")//book:遍历所有 book 节点,绑定到变量$b -
where $b/@category = "fiction":只保留类别为 fiction 的书 -
order by $b/title:按标题升序排列(支持descending) -
return:构造新 XML 片段,插入标题文本{data($b/title)}
注意:for 和 return 必须成对出现;let 可用于预计算中间值,比如 let $price := $b/price。
条件与构造:动态生成结果
查询不只是提取,还能根据条件返回不同结构:
- 用
if-then-else分支:if ($b/@category = "CHILDREN") then{data($b/title)} else{data($b/title)} - 用大括号
{...}切换上下文:在 XML 构造中嵌入查询结果,例如{data($b/title)} - 字符串可用单引号或双引号,变量必须以
$开头,如$b
命名空间和文档加载:别漏掉这两步
如果 XML 带命名空间(比如 ),必须先声明才能查:
-
declare namespace aw = "http://example.com";(放在查询开头) - 之后路径中要带前缀:
/aw:bookstore/aw:book - 加载外部文件用
doc("books.xml");SQL Server 中常配合xml类型变量使用,如@x.query('...')
注释写法是 (: 这是一条注释 :),不是 。
基本上就这些。掌握路径、FLWOR、条件构造和命名空间,就能覆盖绝大多数 XML 查询需求。不复杂但容易忽略细节,比如大小写敏感、else 不可省略、属性必须加 @。多练几个真实 XML 文件,很快就能上手。










