XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
原本XPath动机于提供一种通用的、介于XPointer与XSL间语法行为模型的渴望。XPath很快的被开发者采用来当作小型查询语言
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
原本XPath动机于提供一种通用的、介于XPointer与XSL间语法行为模型的渴望。XPath很快的被开发者采用来当作小型查询语言
布尔表达式
布尔表达式的值只能是:真或者假。XPath 定义了 and 和 or 运算符。对于 and,首先计算左侧的操作数:如果不成立则返回 false;否则计算右侧的操作数并决定表达式的结果。对于 or,如果左操作数计算结果为真则表达时返回 true;否则计算右操作数并决定表达式的值。比如,布尔表达式 type="BidOnly" 在 AuctionItemList.xml 中第二个 item 元素的上下文中计算结果为 true。
XPath 定义了以下运算符:
= 表示“等于”
!= 表示“不等于”
< 表示“小于”
<= 表示“小于等于”
> 表示“大于”
>= 表示“大于等于”
比如,在 AuctionItemList.xml 中第一个 item 元素的上下文中,布尔表达式 bidIncrement != 10 返回 true,而在第二个 item 元素的上下文中返回 false。= 运算符用于节点时,测试两个节点的值是否相等,而不论是否是同一个节点。该运算符可用于比较属性值。比如,item[@type = @private] 选择 type 属性值和 private 属性值相同的物品。XML 文档中包含 XPath 表达式时,必须遵循 XML 1.0 的结构良好性规则,任何 < 或 <= 字符必须分别用 < 和 <= 表示。比如,XPath 表达式 bidIncrement < 5 在 XPointer 中是合法的,但是在 XSLT 文档中必须写成 bidIncrement < 5。
数字
XPath 数字是 64 位双精度浮点数。XPath 数字包括“非数字” NaN 值、正无穷和负无穷、正零和负零。XPath 提供的数值运算符有:+(加)、-(减)、*(乘)、div(除)和 mod(整除求余)。如果需要数值运算法会把操作数转换成数字,就像使用 number 函数一样(参见 函数库)。提示:减法(-)运算符的前面必须有空格,因为 XML 允许字符串中包含“-”字符。下面是 XPath 数字表达式的一些例子:
7 + 3 返回 10
7 - 3 返回 4
7 * 3 返回 21
7 div 3 返回 2.3333333333333335
7 mod 3 返回 1
提示: 星号(*)可以被解释成通配符或者乘法字符。XPath 定义了词法规则以消除这种歧义(详请参阅 XPath 1.0 规范)。但是,除法字符引入了新的运算符 div,因为,反斜杠(/)用于分隔定位步。
字符串
XPath 字符串是有效的 XML 1.0(Unicode)字符序列,如 Miles Smiles album, CD。XPath 中的字符串使用引号(' 或 ")包围起来。如果 XML 文档中的 XPath 字符串包含引号,可以选择:分别使用 ' 或 " 引起来。比如,description = 'New 256m "USB" MP3 player'。 如果表达式用双引号(")包围起来,则在表达式中使用单引号('),反之亦然。比如,'New 356m "USB" MP3 player'。
函数库
XPath 定义了一组函数,称为核心函数库。每个函数从三个方面来定义:
函数名
返回类型(必须的,不能使用 void)
参数类型(可以没有参数或者带有多个参数,参数可以是必需的也可以是可选的)
您可能会发现在谓词和表达式中经常会使用函数。其他规范如 XSLT 扩展了这个函数集。函数被分成四类,以下分别介绍:
节点集函数
节点集函数提供关于一组节点(一个或多个节点)的信息。常用的节点集函数有:
last()――返回一个称为上下文大小的数字,即给定上下文中的节点数,不同于最后一个节点。
position()――返回一个称为上下文位置的数字,集当前节点在给上下文节点集(列表)中的位置。比如,可以用表达式 position()=last() 测试处理的是否是集合中的最后一个节点。
count(node-set)――返回实参节点集中的节点数。比如,在 AuctionItemList.xml 文档的上下文中,count(//item) 返回 item 元素的个数,即 7。
id(object)――返回一个节点集,根据在 DTD 中声明为 ID 类型的唯一标识符选择元素。因为在 AuctionItemList.xml 中没有使用 DTD,这个例子中得到的节点集总是空集。Id("ItemId0001") 返回一个空节点集。
XPath 还定义了和节点名及名称空间有关的其他三个函数:
local-name()
namespace-uri()
name()
字符串函数
通过字符串函数您可以操纵字符串。常用的字符串函数有:
string()――把参数对象或者上下文结点转化成字符串。合法的参数包括节点集、数字、布尔值或者其他任何类型――但是对于最后一种情况转换的结果不可预料。建议使用 XSLT 函数 format-number 把数字转化成字符串,或者使用 XSLT 元素 xsl:number 提供给用户。
concat()――以两个或更多字符串作为参数并返回这些字符串的连接。比如,concat("Original ","recording ","Blue Train LP record") 返回 "Original recording Blue Train LP record"。
starts-with()――如果第一个字符串参数以第二个字符串参数开始则返回 true,否则返回 false。比如,starts-with("Miles Smiles album, CD", "Miles") 返回 true。
contains()――如果第一个字符串参数包含第二个字符串参数则返回 true,否则返回 false。比如,contains("Miles Smiles album, CD", "album") 返回 true。
其他的 XPath 字符串函数包括:substring()、substring-before()、substring-after()、string-length()、normalize-space() 和 translate()。
布尔函数
布尔函数用于把一个对象或字符串转化成 true 或者 false,或者直接获得真或假的值。布尔函数有:boolean()――根据以下规则返回作为参数传递的对象转换成布尔值的结果:不同于 0 或者 NaN 的数字为 true;非空的节点集或者字符串为 true。其他类型的对象已不可预料的方式转换。
not()――如果作为参数传递的布尔值为 false 返回 true,否则返回 false。
true() 和 false()――分别返回 true 或 false。这些函数很有用,因为在 XPath 中 true 和 false 被看作是普通的字符串而不是真和假的值。
lang()――如果上下文节点的语言和字符串参数中指定的语言相同,或者是它的一种子语言返回 true,否则返回 false。上下文节点的语言通过 xml:lang 属性的值定义。比如,lang("en") 对于 AuctionItemList.xml 树中的任何节点都返回 false,因为没有指定 xml:lang 属性。
数字函数
数字函数是 XPath 的数值函数,都返回数字。其中包括:
number()――把可选的对象参数(如果没有指定参数则使用上下文节点)转化成数字,转换的规则如下:
布尔值 true 转换成1,false 转换成 0。
字符串转换成合理的数字。
节点集首先转换成字符串,然后把这个字符串转换成数字。
其他类型对象以不可预料的方式转换。比如,number("250") 返回 250,而 number("miles1965") 返回 NaN。
sum()――对节点集参数中的所有节点应用 number() 函数后返回它们的和。
floor()――返回不大于数字参数的最大整数数字。比如,floor(2.75) 返回 2。
ceiling()――返回不小于数字参数的最小整数数字。比如,ceiling(2.75) 返回 3。
round()――返回和数字参数最接近的整数数字。比如,round(2.75) 返回 3。