2007-08-04

简化XML读写-用XPath等查询定义简化DOM编码

来源: 本站收集整理 作者:佚名 评论 0 条
 

   print "'%s' anchors '%s'." % (element.text,

   attributes['name'])

   def report(element):

   detail_anchor(element)

   for x in element.getchildren():

   report(x)

   report(elementtree.ElementTree.parse("draft2.xml").getroot())

  使用下面描述的 5.5.1 引用模板,将产生类似如下的输出:

  清单 2. 清单 1 中的程序产生的报告

   'related developerWorks content' is at 'http://www.ibm.com/developerworks'.

   'entire series' is at 'http://www.ibm.com/...'

   ...

   'IBM product evaluation versions' is at 'http://www.ibm.com/...'

  假如有一种标准的方法可用来查询 DOM 实例、解压指定元素、属性和标记的信息,那么可带来多大的简化?您自己看吧:

  清单 3. 基于 XPath 的与清单 1 等价的代码。

   import elementtree.ElementTree

   def detail_anchor(element):

   if element.tag == "a":

   attributes = element.attrib

   if "href" in attributes.keys():

   print "'%s' is at URL '%s'." % (element.text,

   attributes['href'])

   if "name" in attributes.keys():

   print "'%s' anchors '%s'." % (element.text,

   attributes['name'])

   for element in \

   elementtree.ElementTree.parse("draft2.xml").findall("//a"):

   detail_anchor(element)

  清注重,“//a” 在英语中的意思是 “在整个文档中搜索标记为 ‘a’ 的元素”。从本质上说,清单 3 产生的输出与 清单 2 的输出是相同的。



  比较 清单 1 和清单 3。前者已经够简单了 —— 可是后者更加简单。它消除了明确地指定递归的需求。更重要的是,XPath 代码根据 XML(逻辑)标记,而不是结构。标记更接近于人的思维,并且持续时间长,从这个角度来看,结构是相对短暂的实现细节。通过使用更复杂的查询,XPath 的声明性样式与传统的面向结构的过程搜索实现相比,其优势更加明显。

  本文的意义在于,能够把 XPath 融入到现有的 XML 程序开发中,并能立即获得性能和可维护性上的提高。对于我来说,这更像是在使用汇编程序、编译器、和更高阶的语言:我可以完全使用机器语言编写整个程序,但是学习高生产率的方法会简单划算。此外,XPath 通常能提高 手工编码的搜索的性能。

  可是,这样却产生了一个问题:有方法改进 XPath 吗?是的,当然有 —— 但是有一些限定。XQuery 和 XSLT 是另外两种接受程度与 XPath 相当的 XML 定义(XSLT 可能是它们三者中使用最为广泛的,而 Xquery 的有用实现则最少)。在声明重点上 XSLT 与 XPath 类似,而 Xquery 在 XPath 的查询中加入了过程的功能。两者都能生成模板 —— 简要地说,嵌入可识别的 XML 代码段的查询 —— 或多或少符合语言习惯。这一点值得注重,因为一些 XML 理论家建议把模板作为理想的表示形式。

  但是整体来说,相对于 XPath 产生的巨大效益而言,XQuery、XSLT 或此类特定于语言的查询包(如 Amara、XQJ、或JAXP)所带来的好处都是递增的。参考资料 中提供的 Uche Ogbuji 撰写的论文清楚地比较了采用各种不同方式解决的示例问题。只有在感觉 XML 处理相当复杂的时候,才使用这些更专业的接口。但是现在就开始使用 XPath!
共3页: 上一页 [1] 2 [3] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:客户端访问Web Service方法的一个细节  
下一篇:认识XML基础知识
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号