📅  最后修改于: 2023-12-03 15:21:19.420000             🧑  作者: Mango
XQuery 和 XPath 是用于 XML 文档查询和处理的语言,它们是 W3C 组织定义的标准语言,可以用于从结构化或半结构化数据中提取有用信息。
XPath 是 XQuery 的基础,它是一种用于在 XML 文档中查找信息的语言,可以用来定位特定节点和属性,以及过滤和排序数据。
XQuery 是一种更为强大的语言,它建立在 XPath 的基础上,并具有编程语言的特征,可以通过类似于 SQL 的查询语句来对 XML 文档进行复杂的查询和处理。XQuery 不仅可以从 XML 文档中提取数据,还可以对查询结果进行转换、过滤和排序,生成新的 XML 或其他格式的数据。
XPath 使用路径表达式来选择节点或者节点集,路径可以是绝对路径或相对路径。
/ # 选择根节点
// # 选择当前节点或任意后代节点
. # 选择当前节点
.. # 选择当前节点的父节点
* # 选择所有节点
@ # 选择元素的属性
nodeName # 选择节点名称为 nodeName 的节点
nodeName/text()# 选择 nodeName 节点的文本内容
谓语是用于过滤节点的,可以在路径表达式中添加方括号来指定一个谓语条件。可以根据以下属性进行过滤:
nodeName # 节点名称为 nodeName
@attributeName='value' # 属性 attributeName 的值为 value
[position=1] # 节点的位置为 1
[last()] # 最后一个节点
[position()<=3] # 前三个节点
[starts-with(@attribute, 'val')] # 属性 attributeName 值以 'val' 开头
[not(@attribute)] # 没有属性 attributeName 的节点
[nodeName='text'] # 节点名称为 text
[nodeName()='text'] # 节点名称为 text
[*='value'] # 节点的文本内容中包含 value
XPath 的轴可以定义一种与当前节点有关的选择器,可以在路径表达式中使用轴。
以下是常用的几种轴:
ancestor # 所有祖先节点
ancestor-or-self # 所有祖先节点以及当前节点
attribute # 所有属性节点
child # 所有子节点
descendant # 所有后代节点
descendant-or-self # 所有后代节点以及当前节点
following # 当前节点之后的所有节点
following-sibling # 当前节点之后的所有同级节点
namespace # 所有命名空间节点
parent # 当前节点的父节点
preceding # 当前节点之前的所有节点
preceding-sibling # 当前节点之前的所有同级节点
self # 当前节点
XQuery 除了支持 XPath 中的语法外,还具有更为强大的查询语句、函数和变量等特性。
XQuery 的查询语句类似于 SQL 的语法,用于从 XML 文档中选择和处理数据。以下是一个 XQuery 的例子:
for $book in doc('books.xml')//book
where $book/price > 50
order by $book/title
return <book>{$book/title}</book>
以上查询语句的作用是选择价格大于 50 的图书的标题,并按标题排序返回。
XQuery 还支持许多函数和变量,可以对查询结果进行加工处理。以下是一些常见的函数和变量:
distinct-values() # 返回去重后的值
fn:count() # 返回节点数
round() # 对数值进行四舍五入
sum() # 计算数值之和
fn:string-length() # 返回字符串的长度
substring() # 截取字符串中的一部分
$variable # 表示变量
XQuery 和 XPath 可以用于 Web 开发、数据分析和转换等多个领域。常见的应用场景包括:
XQuery 和 XPath 是处理 XML 数据的必备工具,掌握它们可以更高效地处理和操作 XML 数据,实现数据分析和转换等目的。开发者可以根据需要选择合适的语法和工具,提高开发效率和代码质量。