XPath

来自站长百科
跳转至: 导航、​ 搜索

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

简介[ ]

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

什么是 XPath?

  • XPath 使用路径表达式在 XML 文档中进行导航
  • XPath 包含一个标准函数库
  • XPath 是 XSLT 中的主要元素
  • XPath 是一个 W3C 标准

XPath 表示法[ ]

最常见的XPath表达式是路径表达式(XPath这一名称的另一来源)。路径表达式是从一个XML节点(当前的上下文节点)到另一个节点、或一组节点的书面步骤顺序。这些步骤以“/”字符分开,每一步有三个构成成分:

  • 轴描述(用最直接的方式接近目标节点)
  • 节点测试(用于筛选节点位置和名称)
  • 节点描述(用于筛选节点的属性和子节点特征)

一般情况下,我们使用简写后的语法。虽然完整的轴描述是一种更加贴近人类语言,利用自然语言的单词和语法来书写的描述方式,但是相比之下也更加罗嗦。

简写后的语法最简单的XPath如下:

  • /A/B/C

在这里选择所有符合规矩的C节点:C节点必须是B的子节点(B/C),同时B节点必须是A的子节点(A/B),而A是这个XML文档的根节点(/A)。此时的这种描述法类似于磁盘中文件的路径(URI),从盘符开始顺着一级一级的目录最终找到文件。

这里还有一个复杂一些的例子,包含了全部构成成分(请详细的看):

  • A//B/*[1]

此时选择的元素是:在B节点下的第一个节点(B/*[1]),不论节点的名称如何(*);而B节点必须出现在A节点内,不论和A节点之间相隔几层节点(//B);与此同时A节点还必须是当前节点的子节点(A,前边没有/)。

啰嗦的语法在未缩写语法里,两个上述范例可以写为:

  • /child::A/child::B/child::C
  • child::A/descendant-or-self::B/child::node()[1]

在XPath的每个步骤里,通过完整的轴描述(例如:child或descendant-or-self)进行明确的指定,然后使用::,它的后面跟着节点测试的内容,例如上面范例所示的A以及node()。

XPath 标准函数[ ]

XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。

XPath 节点[ ]

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。

XPath 术语

节点(Node)

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

XPath存取函数[ ]

名称 说明

fn:node-name(node) 返回参数节点的节点名称。

fn:nilled(node) 返回是否拒绝参数节点的布尔值。

fn:data(item.item,...) 接受项目序列,并返回原子值序列。

fn:base-uri()

fn:base-uri(node)

返回当前节点或指定节点的 base-uri 属性的值。

fn:document-uri(node) 返回指定节点的 document-uri 属性的值。

函数与运算符XPath[ ]

1.0定义四种数据型别:节点型(本身无序的节点组)、字符串型、数字型、与布尔型。

有效的运算符有:

  • /、//以及..运算符,一般用于轴描述。
  • 合集运算符 | 把两个节点形成联集。
  • 布尔运算符 and、or以及not()函数
  • 数学运算符 +、-、*、div(除)以及mod(取余数)
  • 比较操作子 =、!=(不等于)、<、>、<=、>=

函数有:

  • 文字运算函数

concat(), substring(), contains(), substring-before(), substring-after(), translate(), normalize-space(), string-length()

  • 数学运算函数

sum(), round(), floor(), ceiling()

  • 节点属性取得函数

name(), local-name(), namespace-uri()

  • 处理上下文数据取得函数

position(), last()

  • 类型转换函数

string(), number(), boolean()

XPath 2.0[ ]

在W3C建议下,XPath 1.0于1999年11月16日发表。XPath 2.0目前正在W3C审核过程的最终阶段。XPath 2.0表达了XPath语言在大小与能力上显著的增加。

最值得大书特书的改变是XPath 2.0有了更丰富的型别系统;XPath 2.0支持不可分割型态,如在XML Schema内建型态定义一样,并且也可自纲要(schema)导入用户自定型别。现在每个值都是一个序列(一个单一不可分割值或节点都被视为长度一的序列)。XPath 1.0节点组被节点序列取代,它可以是任何顺序。

为了支持更丰富的型别组,XPath 2.0提供相当延展的函式与操作子群。

XPath 2.0实际上是XQuery 1.0的子集合。它提供了一个for表达式。该式是XQuery里“FLWOR”表达式的缩减版。利用列出XQuery省去的部分来描述该语言是可能的。主要范例是查询前导语(query prolog)、元素和属性建构式、“FLWOR”语法的余项式、以及typeswitch表达式。

相关条目[ ]

参考来源[ ]