前面我们已经提到,在XSL中我们有时候需要取出文档中特定的一个元素集合,但是如何指定这个元素集合呢?这样就需要用到XPath标准。
XPath是在1999年11月16日和XSLT一起成为正式标准的。XPath是用作XSLT和XPointer的对XML文档各部分进行定位的语言。它给XSLT和XPointer(XML文件内部链接语言)提供一个共同、整合的定位语法,用来定位XML文件中各个部位。XPath除了提供一套定位语法之外,还包括一些函数,它们提供基本的数字运算、布尔运算和字符串处理功能。
XPath使用一个紧凑的、非XML的语法来方便实现XPath在XML属性值中的使用,它基于XML文档的逻辑结构,在该结构中进行导航。除了用于定位,XPath 自身还有一个子集能用于进行匹配,它能验证一个节点是否匹配某个模式。XPath把一个XML文档看成一个树或节点的模型。节点的类型可以有多种,包括元素节点、属性节点和文本节点。
XPath的基本语法由表达式构成。在计算表达式的值之后产生一个对象,这种对象有以下四种基本类型:节点集合、布尔型、数字型和字符串型 。
表达式的计算依据上下文的出现,XSLT和XPointer中分别规定了XPath表达式将在怎样的情况下出现。这些上下文的关系包括:节点、一对正整数(表明位置和大小)、一套变量绑定集合、函数库以及规定表达式范围的名域声明。其中,变量绑定是从标量名称到变量值的映射。变量的值是一个对象,可以是表达式可能得到的各种类型,也可以是其他没有规定的类型。在函数库中,每个函数有零个或多个参数,并返回一个结果。XPath定义了所有支持工具都必须实现的核心函数库。其中的函数的参数和结果都是上面涉及的四种基本类型。当然XSLT 和XPointer中还对XPath的核心函数库进行了扩展,有些函数的参数和返回结果数据类型超出了四种基本类型。
XPath基本上和在文件系统中寻找文件类似,如果路径是以"/"开头的,就表明该路径表示的是一个绝对路径,这和在UNIX系统中关于文件路径的定义是一致的。
当然XPath本身有一套完整的语法说明,类似巴克斯-诺尔范式。这里我们不想列出所有严格的定义表达式,而采用实际例子的方法来说明如何使用XPath语言。
1.关于"/,"//"的使用,见下面的例子:
1 /网站 表示选择根目录下的元素网站
2 /网站/中文网站表示选择根目录下元素网站下面的所有元素名称为中文网站的元素
3 /网站/中文网站/门户网站表示选择所有的名称为门户网站的元素,它的父节点为中文网站,而中文网站是根节点元素中文网站的孩子。
4 file://体育网站 表示选择所有元素名称为体育网站的元素。它可以在XML文档节点的任何位置。
2.关于"*"的使用,见下面的例子:
1 file://*表示所有的元素。
2 file://体育网站/足球网站表示选择所有元素名称为足球网站的元素,但是它的父节点必须是体育网站。
3 /网站/中文网站/门户网站/*表示选择节点/网站/中文网站/门户网站/下的所有元素。
4 /*/*/娱乐网站表示选择所有名称为娱乐网站的元素,前提是该元素的祖先有两层。如果和武林中门派弟子辈分相类比的话,就是表示所有第三代弟子。