• λ我爱Aspx >> Asp.Net >> XPath在无线应用中的实现(下)
  • XPath在无线应用中的实现(下)

  • :aspxer  Դ:internet  :2007-5-15 20:46:33  ؼ:
  • ./node()/message[2]

    这两个查询之间唯一的区别就是我们使用数字2来代替last()方法。 事实上在本例中last()函数返回的值就是2(特定location step的结点集中的结点数)。 把这两个相同的查询应用到代码段2中的WSDL文件,这次你会发现两个查询没有返回相同的结果。 代码段2中有三个message元素,所以现在last()函数返回数字3。

    注意本讨论中的last()函数总是返回一个数字。

    position()函数

    如果你把下面的这些查询应用到代码段2中的WSDL文件,

    ./node()/message[1]/part

    ./node()/message[2]/part

    ./node()/message[3]/part

    它们将分别返回message元素的第一个、第二个和第三个part子元素。 由此可见节点集中的每个节点都有一个位置。 第一个节点的位置是1,第二个节点的位置是2,以此类推。

    如果你想要得到除第二个以外的所有的message元素,你该怎么办? 你可以使用position()函数取得一个节点的位置。 下面的这条查询将返回代码段2中的第一个和第三个message元素:

    ./node()/message[position()!=2]

    position()函数只是返回指定值所表示的节点的位置。 谓词[position()!=2] 把所有的message元素的位置和2做比较,然后找出位置不是2的节点。

    count()函数

    代码段1中的portType元素有多少个message子元素? 数一数你就发现有两个message元素。 在XPath中解决"多少个"这种问题是一个二步的操作。 首先,写一个用来找到你想要统计的所有的子元素的XPath查询。 然后地像下面给出的那样,把 XPath查询传送到count()函数中:

    步骤1: ./node()/message

    步骤2: count(./node()/message)

    count()函数统计XPath查询所得到的节点集中的节点数,并返回这个节点数。

    name()、local-name()和namespace-uri()函数

    如果把下面的查询应用到代码段1中的WSDL文件的话,那么会出现什么情况呢?

    ./node()/*[5]

    它返回根元素的第五个子元素(即service元素)。 service元素本身是一个完整结构,也包含子元素。 因此,这个XPath查询的返回值实际上是一个XML节点而不仅仅是一个元素名。

    name()函数返回XML节点的名称。 例如,下面的查询应用到代码段1中将返回字符串"service":

    name(./node()/*[5])

    同样,下面的查询将返回字符串"wsd:definitions"(使用域名空间前缀的根元素的全名):

    name(./node())

    local-name()和namespace-uri()函数与name()函数类似,除了local-name方法只返回不带域名空间前缀的元素的局部名称,而namespace-uri函数仅仅返回域名空间URI。举例来说,请在代码段1中试验下面的查询:

    Ҷƪл˵?
  • һƪXPath在无线应用中的实现(上)
    һƪXML在.net平台下的自定义控件的应用