我爱Aspx >> Asp.Net >> XPath在无线应用中的实现(下)1 2 3 4 下一页
在本文的第一部分中,我们介绍了XPath并讨论了各种各样的从简单到复杂的XPath查询。 通过把XPath查询应用到XML示例文件,我们详细说明了各种重要的XPath定义比如location step、context node、location path、axes和node - test。 我们然后讨论了多个简单查询组合成的复杂的XPath查询。 我们还讨论了无线二进制XML(WBXML)--XML在无线应用领域的对应物--的抽象结构。 最后我们介绍一个简单的XPath处理引擎的设计。
在这一部分里,我们打算讨论XPath的更进一步的特性--在一个XML文件上执行复杂检索的操作。 我们将讨论谓词或者过滤器查询以及在XPath中的函数的使用。我们将介绍各种的用于处理WSDL和WML的XPath查询。 我们还将增强我们的XPath引擎的功能,使之包括谓词、函数和不同的数据类型。
过滤查询和谓词让我们从一个将返回任何XML文件当中的根节点的简单查询开始:
./node()
我们可以更进一步,使用另一个简单查询,选择根节点的全部的直接子节点:
./node()/*
如果你想要得到所有的是根节点的直接子节点并且只有一个type属性的节点,那么该怎么办呢? 那么就使用下面的这个查询:
./node()/*[attribute::type]
在代码段1中,这个查询将返回binding元素。 由此可见,写在方括号之内的代码attribute::query担负一个过滤器的功能。 XPath中的过滤器被称作谓词(predicate),写在方括号内。 一个谓词作用在一个结点集上--在这个例子中,结点集由根节点的所有的直接子节点组成---应用过滤条件(在这里,结点肯定有一个type属性)到结点集上。 产生的结果就是一个经过过滤的结点集。
谓词可以从简单到很复杂。 也许XPath谓词的简单形式就像下面的查询中的只是一个数字,返回根元素的第二个子节点(message元素):
./node()/*[2]
查询语句./node()/message[attribute::name="TotalBill"]/text() 将寻找根元素的一个属性name值为TotalBill的特定的message子节点。 查询将返回特定的message元素的所有文本结点。 这个查询将返回代码段1中两个message元素中的第二个。
XPath 函数假定你想要回答下面对代码段1中的WSDL文件所提出的问题:
1. 最后一个operation元素的name属性的值是什么?
2.定义元素有多少个message子元素?
3. 根元素的第一个子元素的名称是什么?
last()函数
last()函数将总是指向结点集的最后一个结点。 下面的这个查询,当被应用于代码段1中的WSDL文件的时候,将返回第二message元素(即 名称是TotalBill的message元素):
./node()/message[last()]
注意下面的这条查询也返回相同的message元素:
Ҷƪл˵?
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]