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

  • :aspxer  Դ:internet  :2007-5-15 20:46:33  ؼ:
  • 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元素:

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