XPath

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 的结构良好性规则,任何 < 或 <= 字符必须分别用 &lt; 和 &lt;= 表示。比如,XPath 表达式 bidIncrement < 5 在 XPointer 中是合法的,但是在 XSLT 文档中必须写成 bidIncrement &lt; 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 字符串包含引号,可以选择:分别使用 &apos; 或 &quot; 引起来。比如,description = 'New 256m &quot;USB&quot; 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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值