您现在的位置是: 软件 > 开发者网络 > 技术跟踪 > XML与.NET专栏 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始


-文件系统基础知识(上)
-Photoshop字体特效手册
-硬件测试小软件集粹
-在故障恢复控制台对硬盘分区和格式化

XPath在无线应用中的实现(上)
2003-03-14· ·合肥小雨··YESKY

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(我们需要的结点必须通过的一个试探)。

1 2 3  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 实例演练ASP+XML编程
 使XML本地化和关系化
 创建高效的MSXML应用
 利用XML实现通用WEB报表打印
 简析JAVA中的XML编程
 DOMXML: Expat之外的另一选择
 在Visual Basic 6.0中操纵XML文件
 XPath查询XML文档的注意事项
 XML在B/S架构开发中的应用
 XML和J2EE的完美结合
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!