17370845950

XQuery怎么查询XML XQuery基础语法入门教程
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 {data($b/title)}:构造新 XML 片段,插入标题文本

注意:forreturn 必须成对出现;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 文件,很快就能上手。