曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
果存在模式的话)。这意味着比较运算[price = 29.95](数字值不带引号)是有效的。
提示如果存在模式,且节点的内容不能转化为模式中指定的类型,例如:它所包含的字
符对于该数据类型来说是不合法的,比如数字值中的字母,它将不作为匹配的节点。
除了等于运算符,IE5 XSL还提供其它比较运算符:
表E - 4
简单表示法运算符描述
= $ e q $ 区分大小写的等于,例如:
[price = 29.95]
! = $ n e $ 区分大小写的不等于,例如:
[category != 'Script']
< * $ l t $ 区分大小写的小于,例如:
[radius $lt$ 14.73]
922使用XML 高级编程
下载
(续)
简单表示法运算符描述
< = * $ l e $ 区分大小写的小于等于,例如:
[age $le$ 18]
> $ g t $ 区分大小写的大于,例如:
[name > 'H']
> = $ g e $ 区分大小写的大于等于,例如: [speed >= 55]
$ i e q $ 不区分大小写的等于
$ i n e $ 不区分大小写的不等于
$ i l t $ 不区分大小写的小于
$ i l e $ 不区分大小写的小于等于
$ i g t $ 不区分大小写的大于
$ i g e $ 不区分大小写的大于等于
注:X S L属性中不能包含‘<’和‘< =’运算符,因为属性必须符合X M L标准的格式正规约束。因此,最好使用等
价的$ l t $和$ l e $。另外,所有过滤运算符名称(例如: $ e q $)都区分大小写,因此它们必须是小写的。
运算符的简单表示法和较长的表示法使用方式相同,因此以下两个模式串是等价的:
[category = 'Scripting']
[category $eq$ 'Scripting']
同样,以下两个模式串也是等价的:
[category != 'Scripting']
[category $ne$ 'Scripting']
不区分大小写的运算符没有对应的简单表示法。然而,对于不需要考虑大小写的匹配,它
非常有用。X S L中没有U C a s e或L C a s e函数(除非你自己编写相应的脚本函数),因此它能够避免
多次匹配,例如:
[category = 'html' $or$ category = 'HTML']
可以直接改为:
[category $ieq$ 'html']
3. 逻辑过滤运算符
除了比较运算,我们还可以在模式中增加逻辑运算符,产生更加复杂的模式串(如同前一
节的最后一个例子)。下表列出了所有逻辑运算符:
表E - 5
简单表示法运算符描述
& & $ a n d $ 逻辑与( A N D)
| | $ o r $ 逻辑或( O R)
$ n o t $ 逻辑非( N O T)
因此,利用以上运算符,我们可以选择< c a t e g o r y >元素等于‘ S c r i p t i n g’或‘H T M L’的图
书:
附录E IE 5 XSL引用使用923 下载
book/[category = 'Scripting' $or$ category = 'HTML']
我们还可以选择书名为‘ Instant JavaScript’(不区分大小写的匹配),但不属于‘S c r i p t i n g’
类的图书:
book/[category $ne$ 'Scripting' $and$ title $ieq$ 'Instant JavaScript']
$ n o t $仅仅改变匹配的“事实”,因此以下两个模式串是等价的,它们都匹配有值为
‘S c r i p t i n g’的子元素< c a t e g o r y >,且没有值为‘H T M L’的子元素< c a t e g o r y >的< b o o k >元素(因
此它不包括同时有这两个值的< c a t e g o r y >子元素的< b o o k >元素):
book/[category = 'Scripting' $and$ category $ne$ 'HTML']
book/[category = 'Scripting' $and$ $not$ category = 'HTML']
4. 过滤集合运算符
在以上所有使用比较运算符的过滤模式例子中,都是以缺省的过滤操作为基础的,即:如
果过滤器中没有指定运算符,则返回匹配模式的任何或所有节点。然而,我们能够更加精确地
指定所需的匹配元素,它类似于使用索引指定第一个元素。为此,我们将使用集合运算符$ a n y $
和$ a l l $:
表E - 6
运算符描述
$ a l l $ 仅当指定的模式匹配集合中的所有项时返回Tr u e。
# a n y $ 如果指定的模式匹配集合中的任何一项,返回Tr u e。
为了理解这两者之间的差别,最简单的方法是考虑元素是如何被挑选的。对于名为< b o o k >
的元素,我们可以使用以下模式指定当它有值为‘ H T M L’的子元素< c a t e g o r y >时它被包含:
book[category = 'HTML']
然而,它仅仅匹配第一个< c a t e g o r y >子元素的值为‘ H T M L’的< b o o k >元素。如果第一个
< c a t e g o r y >的值不是‘ H T M L’,即使其它(后续的)子元素满足这个条件, < b o o k >元素也不会
被选中。然而,如果我们使用模式:
book[$any$ category = 'HTML']
我们将得到所需的< b o o k >元素,因为我们指定希望匹配任何有值为‘ H T M L’的< c a t e g o r y >
子元素的< b o o k >元素。如果使用集合运算符$ a l l $,我们将指定选出所有< c a t e g o r y >子元素的值
都为‘ H T M L’的< b o o k >元素,而不仅仅是第一个或任何一个子元素符合条件的< b o o k >元素。
由此得到的结果中的< c a t e g o r y >子元素的值都将是‘ H T M L’:
book[$all$ category = 'HTML']
当然,如果某个< b o o k >元素只有一个< c a t e g o r y >子元素,且值为‘ H T M L’,则这三个过滤
器都将返回这个元素。仅当模式指定的资源有多个匹配的子元素(或其他元素)时,才会体现
出这三者的差别。
E.2.3 XSL内置的方法
当我们在前面介绍如何根据索引选择元素时,曾经看到一个内置的X S L方法。e n d ( )方法将
924使用XML 高级编程
下载
返回匹配的节点集合中的最后一个节点:
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(126)