曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
程序清单8 - 4 2
我们可以使用下面的句法指向具有I D为b o o k 1的B o o k元素。
如果程序段仅仅是一个I D值,该指针指向具有该I D的元素。注意为了使这个速记表示正常
工作,正被指向的文档必须具有指定该元素的I D属性的方案。
268使用XML 高级编程
下载
(2) 子序列程序段标识
子序列程序段标识符,或者称为t u m b l e r程序段标识符,允许文档通过遍历子元素树来指向。
一些例子可能是有用的。在我们的例子目录文档, c a t a l o g . x m l中:
程序清单8 - 4 3
我们可以利用U R I指向第二个C a t e g o r y元素:
该语法可以按照下列方式理解:
• 转到文档中第一个元素( C a t a l o g元素)
• 然后转向该元素的第一个子元素( b o o k 1 < B o o k >元素)
• 然后转向该元素的第四个子元素( < R e c S u b j C a t e g o r i e s >元素)
• 然后转向该元素的第二个子元素( Web Publishing <Category>元素)
Tu m b e r s也可以从一个命名节点开始,该节点在Bare Name程序段标识方法中被指定。下面
的U R I和上面的等价:
(3) 完整XPo i n t e r规范
完整XPo i n t e r规范是建立在XPa t h推荐标准基础上的。XPa t h提供一种通用方法用于指定文档
的某一部分。对于XPo i n t e r和X S LT来说,它是一个基本技术,在后面的章节我们将涉及到。下
一部分我们看一下XPa t h表达式的构建方法,以及它们如何用于指向X M L文档。
8.4 W3C XPath推荐标准
XPa t h是X S L和XPa t h工作组成员协同工作的规范,他们意识到两者都需要一种选择一部分X M L
文档的方法。两个工作组都使用并依赖于XPa t h提供的功能。XPa t h具有一个推荐状态,意思是它准
备生效,并在这个版本中它不会从当前状态发生变化。它可以在h t t p : / / w w w.W3 . o rg/ TR/XPath中找
到。在这一部分中,我们进一步探讨一下XPa t h,它将使你具备更加充分的信息来实现X P o i n t e r指
针。
8.4.1 Location Step
Location Step将是我们构建XPo i n t e r s时使用最多的构造。它们提供了从X M L文档中选择节
第8章链接和查询使用269 下载
点的方法。它们都通过上下文节点进行操作,它仅仅是在评估location step 时作为X M L文档的当
前节点(如果一个节点没有通过其他某种方法被指定,那么当前节点是文档的根元素)。注意,
如果我们在XPo i n t e r中具有一个以上的location step,那么将会有一个以上的当前节点被评估。
我们在后面举出几个例子时这一点将更加清楚。
位置节点由三种类型信息构建:轴、节点测试及零个或多个谓词。让我们看一下它们中的
每一个及在目标文档的位置节点中的角色。
1. 轴
轴基于上下文节点来分割文档。在评估表达式的时候,它用来定义一个初始区域来应用节
点测试和谓语。可能有表8 - 2中所列的这些轴:
表8 - 2
轴定义
c h i l d 包含上下文节点的所有子节点
d e s c e n d a n t 包含所有上下文节点的子节点、孙子节点等等
p a r e n t 上下文节点的父节点
a n c e s t o r 上下文节点的父节点、祖父节点
f o l l o w i n g - s i b l i n g 上下文节点的下面同属节点
p r e c e d i n g - s i b l i n g 上下文节点的前面同属节点
f o l l o w i n g 文档顺序中跟随上下文节点的所有节点,该轴并不包括上下文节
点、或者属性及命名空间节点的后代节点
p r e c e d i n g 文档顺序中位于上下文节点之前的所有节点,该轴并不包括上下
文节点、或者属性及命名空间节点的祖先节点
a t t r i b u t e 上下文节点的属性节点
n a m e s p a c e 上下文节点的命名空间节点
s e l f 上下文节点
d e s c e n d a n t - o r- s e l f 后代节点及自身节点的联合
a n c e s t o r- o r- s e l f 祖先节点及自身节点的联合
一旦我们指定一个文档中进行分析的某个部分,我们将可以使用节点测试进行更加深入细
致的研究。
2. 节点测试
节点测试允许从指定的轴中选择特定的元素或者节点类型。下面是几种节点测试:
• 指定一个元素名称,该元素名称仅和具有该名字的节点相匹配。一个B o o k节点测试仅和指
定轴中称为< B o o k >的元素匹配。
• 指定通配符,*,来匹配指定轴中所有元素。
• node( )节点测试匹配指定轴中所有节点。
• text( )节点测试匹配指定轴中所有文本元素。
• comment( )节点测试指定轴中所有注释元素。
• processing-instruction( ) 节点测试匹配指定轴中所有的处理指令元素,而且在括号中给出
名字;该测试仅仅匹配具有指定名字的那些处理指令元素。
3. 谓词
270使用XML 高级编程
下载
谓词对通过轴和节点测试得到的节点集合进行更深入的过滤。一个谓词是一个布尔表达式,
用来对通过使用轴和节点测试过滤后得到的结果节点集合中每一个节点进行评估。
你可以使用XPa t h提供的许多函数对你所需要的节点进行测试。这些函数返回不同形状的结
果,如字符串和数字等你可以使用一些比较运算符=,! =,< =,<,> =和>进行相互之间的比较
或者和你所提供的常量进行比较。大一些的表达式可以通过布尔运算符a n d和o r进行分离。这样,
正被讨论的表达式将传递给B o o l e a n ( )函数,它将对表达式按照下面方法进行处理:
• 数字-当且仅当它们既不为零,正零,也不为N a N(看下面)时为t r u e。
• 节点集合-当且仅当它们为非空时为t r u e。
• 字符串-当且仅当它们的长度为非零时为t r u e。
• 对象-如果这些是四种基本类型(数字、节点集合、布尔值和字符串)之外的一种类型,
它们将通过一种依据该类型的方法转换成布尔型。
数字是双精度6 4位I E E E 7 5 4值,并分为下面几类:
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程上(94)