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

  • :aspxer  Դ:internet  :2007-5-15 20:46:33  ؼ:
  • 1 2 3 下一页

    在这篇由两部分组成的文章里,将讨论XPath和它在无线应用程序中的使用。 在文章的第一部分,我们将探讨把XPath应用到XML和在无线领域与之配合的WBXML(Wireless Binary XML,无线二进制XML)。 我们还将讨论设计一个适合于小型无线设备的XPath处理引擎。本文将遵循W3C推荐的XPath 1.0。

    XPath可以为我们做什么?

    XPath允许我们处理XML,并在一个XML文件中搜索特定的结点。在某种程度上,XPath对于XML就像SQL对于关系数据库,即使W3C XML查询语言不久将要问世。 本节给出XPath的一个简略的概述。

    代码段1是一个Web Services Definition Language(Web服务定义语言)文件。 WSDL是一个基于XML的用于描述WEB服务接口的语法。 代码段1中的根元素是definitions。 它有一个name属性,指出它定义的WEB服务的名称。 在我们的例子中,它是BillingService。

    在处理一个WSDL文件的时候,我们想提取出WEB服务的名称。 我们可以使用下面的简单的XPath查询来提取WEB服务的名称∶

    ./child::node()[1]/attribute::name

    你可以看到XPath查询被"/"分隔成三部分。 第一部分只是一个点(.)。 在一个查询的起始处的点号意味着你想从XML文件的头开始检索。

    第二部分(child::node()[1])的意思是:寻找第一个子元素结点。 第一部分和第二部分的综合效应(./child::node()[1])就是:寻找XML文件的第一个元素。

    第三部分(attribute::name)的意思是:寻找一个name属性的值。 整个查询语句的意思就是:寻找XML文件中第一个元素的name属性的值。 回过头来,我们在代码段1 BillingService WSDL文件中应用这个查询。

    下面的查询类似于我们在上面讨论的例子,搜索WSDL文件的目标域名空间:

    ./child::node()[1]/attribute::targetNamespace

    现在让我们看一个更加复杂的例子以加深对查询的了解。 看一看下面的XPath查询并设法把它翻译成为日常的话:

    ./child::node()[1]/child::service/child::port/child::soap:address/attribute::location

    用简单的话语表示就是:

    寻找XML文件的第一个子节点,然后在第一个子节点里面寻找一个service子元素,那么在service元素内寻找一个port元素,然后寻找port元素内的属于SOAP域名空间的address元素并返回它的location属性的值。

    重要的XPath定义

    Location step, context node, node-set 和 location path:

    一个XPath查询的各部分是顺序地取值。 各个部分都被称为是一个location step。 第一个location step的结果被给与下一个location step,以此类推,直到你完成整个查询。 每个location step的结果是一个节点的集合,称为一个node-set。 结点集中的每个结点在取值期间被称为context-node。

    由此可见,每个location step生产一个node-set,然后转交给下一个location step。 结点集中的每个结点都将作为一个context-node和将要被下一个location step取值的node-set,以此类推。 一系列location step构成了完整的location path。

    axis和node-test:

    在一个"/"之后指定一个子节点意味着你想寻找子元素。 而在一个"/"之后指定一个属性意味着你想寻找属性。 子节点和属性关键字被被称作axis。 一个axis指定了你检索的方向。 其它XPath axis包括descendant(意思是你不仅仅对直接子节点元素感兴趣,而且也对它们的子节点,即孙节点感兴趣),parent(直接父节点),ancestor(父节点、祖父节点、曾祖父节点等等)等等。

    你还必须注意每个axis后面跟着的双冒号(::),以及后面跟着得我们寻找的结点的名称(在attribute::targetNamespace中为targetNamespace)。 出现在双冒号之后的名称被称为一个node-test(我们需要的结点必须通过的一个试探)。

    上一篇: 用XMLHTTP和ADODB.Stream读取源代码

    下一篇: 在XSLT中实现按日期排序

    1 2 3 下一页

    Ҷƪл˵?
  • һƪXPath查询XML文档的注意事项
    һƪXPath在无线应用中的实现(下)