我爱Aspx >> Asp.Net >> XPath在无线应用中的实现(下)./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中试验下面的查询:
Ҷƪл˵?
XML在.net平台下的自定义控件的应..[05-15]
构建自己的轻量级XML DOM分析程序[05-15]
使用XPathExpression类对XML进行..[05-15]
利用XmlTextWriter类增强XML数据..[05-15]
XSL中几个封装的函数[05-15]
在XSL中得到任意节点在DOM树中的..[05-15]
如何在XSL中得到某节点到根节点的..[05-15]
利用XSL对XML数据进行加密和大小..[05-15]
使用.NET存储XML数据[05-15]
用XMLHTTP和ADODB.Stream读取源代..[05-15]