严格说来XPATH2.0和XSLT2.0并无直接联系,但是XPATH的主要应用环境是在XSLT中了,所以也把这点内容写在XSLT中。
XPATH2.0中引入了sequence(序列的概念)。注意是XPATH2.0不是XSLT2.0。
XPATH表达式在1.0的时候只能表示四种类型:
1,节点集。
<xsl:vale-of select="root/item"/>
2,布尔值。
<xsl:value-of select="true()"/>
<xsl:if test="root/item=1"/>
3,数值型
<xsl:vlaue-of  select="number('12.01')"/>
<xsl:value-of  select="root/item[1]"/>中的1.
4,字符串
<xsl:value-of  select="'ABCD'"/>
当XPATH2.0引入了对XML Schema内建数据类型的支持,使用户能直接访问19种简单类型。
XPATH2.0将每个xpath表达式的返回值都看作一个序列。
举例来说:我们可以写这样一条语句,<xsl:value-of select="1,2,3"/>。其中,(1,2,3)是一个序列。再如:<xsl:value-of select="root/item,1,root/item[1],root/itm[3]"/>,select属性指定了一个序列,其中包括root/item序列(嵌套序列),数字1,root/item[1]节点,root/item[3]节点。
 
序列仍可作为xslt2.0函数的参数,跟xpath1.0表达式一样:
for $x in /order/item return $x/price * $x/quantity
注意,这是以个XPATH2.0的表达式,不是XSLT2.0的。它返回一个序列,即所有item的price(价格)与quantity(数量)的乘积的集合。我们可以将序列作为XSLT2.0函数的参数,如:
<xsl:value-of select="sum(for $x in /order/item return $x/price * $x/quantity)"/>
 
<xsl:value-of select="if (number(catalog/cd[1]/price) &lt; number(catalog/cd[2]/price)) then
                                     number(catalog/cd[1]/price else catalog/cd[2]"/>
这是一个if操作,求两个cd中价格低的那个,同样是xapth2.0的表达式。
注意和xslt2.0的<xsl:if>的区别。
 
xpath1.0中<xsl:if test="students/student/name='Fred'/>表示,只要有一个学生的名字是Fred,那么表达式就为真。
xpath2.0中提供了更为准确的运算。
some $x in students/student/name satisfies $x='Fred'
另外:
every $x in /students/student/name satisfies $x='Fred'表示所有的学生的名字都是Fred,才为真。