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 属性值类似 SQL 的 SELECT-FROM-WHERE,适合过滤、排序、组合多组数据:
for $b in doc("books.xml")//book:遍历所有 book 节点,绑定到变量 $b
where $b/@category = "fiction":只保留类别为 fiction 的书order by $b/title:按标题升序排列(支持 descending)return {data($b/title)} :构造新 XML 片段,插入标题文本注意: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 文件,很快就能上手。