曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
@ “a t”运算符代表属性路径运算符。它表示模式串的这部分是指当前元素的属性。
例如:b o o k / @ p r i n t _ d a t e用于选择所有< b o o k >元素的p r i n t _ d a t e属性
* 星号代表通配路径运算符,它用于选择所有元素或属性(不考虑这些元素或属
性的名称),例如: b o o k / *用于选择所有< b o o k >元素的所有子元素, b o o k / @ *用
于选择所有< b o o k >元素的所有属性
节点索引位置
路径运算符将返回与模式匹配的所有元素或节点。节点索引能够在匹配的节点集合中指定
特定的节点,特殊的XSL end()函数用于指定最后一个节点:
/booklist/book[0] 根 元'素< b o o k l i s t >的第一个< b o o k >子元素
/booklist/book[2] 根 元'素< b o o k l i s t >的第三个< b o o k >子元素
/booklist/book[end()] 根 元'素< b o o k l i s t >的最后一个< b o o k >子元素
需要注意的是,以下三个例子从同一文档中分别选取三个不同的节点:
book/category[2] 所 有' < b o o k >元素的第二个< c a t e g o r y >子元素
book[2]/category[2] 第 二'个< b o o k >元素的第二个< c a t e g o r y >子元素
(book/category)[2] 所 有' < b o o k >元素的< c a t e g o r y >子元素集合中的第二个
920使用XML 高级编程
下载
' < c a t e g o r y >元素
在最后一个例子中,首先根据圆括号中的模式串创建所有< b o o k >元素的所有< c a t e g r o y >子元
素集合,然后根据索引运算符从中选择第二个元素。
E.2.2 XML过滤器和过滤模式
X M L过滤器的通用格式为[operator pattern],其中o p e r a t o r是可选的过滤运算符,它定义了
如何应用模式, p a t t e r n是必需的X M L过滤模式,它用于根据特定的标准范围选择一个或多个元
素。过滤运算符和过滤模式之间以一个或多个空格分隔。如果需要的话,可选的o p e r a t o r部分能
够包含多个过滤运算符表达式。如果省略过滤运算符,与过滤模式中的标准匹配的所有节点都
将被选中。
1. 过滤模式
X S L过滤模式的功能非常强大,它几乎能够提供无限的模式组合。下面我们将分几类介绍模
式的应用:
• 根据子节点名称选择。
• 根据节点值选择。
• 根据属性存在性选择。
• 根据属性值选择。
• 根据以上方法的组合选择。
1) 根据子节点名称选择
我们前面介绍的位置和层次语法是根据元素的名称及它们在文档中的位置选择匹配的元素。
例如:b o o k / c a t e g o r y用于选择< b o o k >元素的所有< c a t e g o r y >子元素。它等价于以下过滤器:
b o o k [ c a t e g o r y ] / c a t e g o r y
过滤器b o o k / c a t e g o r y实际上是一种速记方式,它说明我们要选择所有含< c a t e g o r y >元素的
< b o o k >元素(等价于b o o k [ c a t e g o r y ]),然后选择< c a t e g o r y >元素。当你希望返回另一个子元素时,
会发现这种较长的写法比较有效。例如:
b o o k [ t i t l e ] / c a t e g o r y
以上模式意味着对于含< t i t l e >子元素的< b o o k >元素,返回它的< c a t e g o r y >子元素。如果要查
找所有同时包含< c a t e g o r y >和< t i t l e >子元素的< b o o k >元素,可以使用双过滤器:
b o o k [ t i t l e ] [ c a t e g o r y ]
2) 根据节点值选择
除了根据名称选择节点之外,我们还可以扩展过滤模式,使之根据值选择节点:
book[category = 'Scripting']
以上模式将选择包含< c a t e g o r y >子元素且该子元素的值为‘ S c r i p t i n g’的所有< b o o k >元素。
如果我们希望得到这类书的书名,可以使用:
book[category = 'Scripting']/title
为了指定当前元素的值,可以使用句点路径运算符。例如:
附录E IE 5 XSL引用使用921 下载
book/title[. = 'Instant JavaScript']
以上模式将选择图书‘ Instant JavaScript’的书名。
3) 根据属性存在性选择
过滤模式可以使用‘@’属性运算符指定元素必须有匹配的属性:
b o o k [ @ p r i n t _ d a t e ]
以上模式仅选择有p r i n t _ d a t e属性的b o o k元素。
4) 根据属性值选择
我们还可以在模式中指定属性的值:
book[@print_date = '1998-05-02']
5) 根据以上方法的组合选择
当然,我们还可以将以上方法组合在一起,对元素或节点进行更精确的选择。例如:
book[@print_date = '1998-05-02']/title[. = 'Instant JavaScript']
以上模式用于查找书名为‘ Instant JavaScript’且在1 9 9 8年5月2日出版的书。
/booklist//cover_design[issue = "final"]/*[@url = 'images']
以上模式用于选择符合下列条件的所有元素
• 它的名称随意,但是有名为u r l的属性,且属性值为‘ i m a g e s’(根据*[@url = 'images'])
• 它是c o v e r _ d e s i g n的子元素,且c o v e r _ d e s i g n本身有值为‘ f i n a l’的子元素i s s u e(根据
cover_design[issue = "final"])
• 它是根元素b o o k l i s t的子孙元素(根据/ b o o k l i s t / /)
需要注意的是,元素和属性的值可以包含在单引号或双引号中。
2. 比较运算符
以上例子都使用等于运算符‘ =’判断两个值是否相等。等号可以用于数字和字符串。缺省
情况下,所有X M L值都是字符串,但是在进行比较时, I E 5会尽可能将它们转化为适当的数据类
型。数据类型是根据节点值字符串的内容或者用于指定数据类型的模式( s c h e m a)选择的(如
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(125)