专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Python » pythonxml:进一步了解 Python中的 XML工具 »正文

pythonxml:进一步了解 Python中的 XML工具

来源: 发布时间:星期四, 2009年1月8日 浏览:24次 评论:0
  Python 模块 4Suite 集被认为是对于 XML 工具‘内行选择’由于其范围和复杂性4Suite 工具给员同时带来了强大功能和陡峭学习曲线但是对于扩展 Python 最近版本所提供 XML 基本能力4Suite 提供了有用选项本文中David 研究了 4Suite 最引人注目方面并向您展示了它如何将有用能力添加到 Python/XML 工具集

  在 可爱 Python专栏早期部分中(其中部分文章发表在 IBM developerWorks XML 专区中 ― 请参阅 参考资料)我介绍了标准分发版(distribution)中包含 Python XML 模块以及少数添加了些有用(但是相当有限)增强其它模块我在那些文章中未讨论 Python XML 工具中巨无霸4Suite

  4Suite 本身只是 FourthoughtInc. 领导相当庞大开放源码项目半(并且大部分由我朋友developerWorks 专栏作家 Uche Ogbuji 负责)其余部分是 4Suite Server如果说 4Suite 内容十分丰富要花好会儿时间才能了解有关它那么对于 4Suite Server这个时间肯定会激增在这个方面4Suite Server 很象另个大型 Python 服务器项目 Zope4Suite Server 是个存储和操作 XML 非常通用后端而且提供了和 XML 文档存储相互操作能力4Suite Server 旨在简化将 XML 和现有进程和系统集成它允许您利用已有业务逻辑(以及数据格式)

  实际上4Suite Server 所能做远不止本文中将要讲述这些目前我只打算研究 4Suite 本身但即便如此也只讨论我觉得最有趣零星部分(我希望这些部分也是对您最有用)

  在某种程度上4Suite 增强了现有 PyXML 能力其中个增强是(目前是测试版) cDomlette 模块在构建复杂 DOM 树方面速度比 PyXML 缺省 DOM 实现快得多但是 4Suite 主要由系列工具构成这些工具比单独 PyXML 能完成更高级工作大体上这些工具是: 4XSLT 、 4XPath 、 4ODS 和 4RDF 后面将对每个工具进行描述

  4Suite 入门

  要了解 4Suite首先应该到 4Suite 网站WebSite下载个分发版(请参阅 参考资料)另外您应该获取名称为 4Suite-docs-0_11_1.zip 文档文件(或者是个等价压缩包直到出现了更新版本)这些文档包含 4Suite 工具重叠描述;这些描述显然比在源压缩文档中找到更完整尤其是文档压缩文档中包含两个非常有用目录名称是 demo和 demos它们提供了这些工具良好举例

  您很可能需要获得 Python 安装中包含常规 PyXML 分发版个更新安装细节似乎取决于您使用特定平台和 Python 版本然而最安全思路方法是从 SourceForge.net(请参阅 参考资料)下载和安装最新 PyXML 分发版并安装 4Suite

  旦安装好了必需部分您就可以使用几个命令行工具以及许多新模块;大多数模块在 Ft 层次结构下但是也会产生 xml 层次结构内些更新

  有关 DOM 只言片语

  Python 有很多 DOM 引擎这却有点令人为难显然未必能从中选出合适而安装 4Suite 则会添加更多选项在安装了 4Suite 的后您可能使用这些几乎等价导入中任何如下所示:

  获取用 Python 写 DOM 几种思路方法

>>>
    
     from
     xml.dom
    
     import
     minidom as dom1
>>>
    
     from
     xml.dom
    
     import
     pulldom as dom2
>>>
    
     from
     Ft.Lib
    
     import
     pDomlette as dom3
>>>
    
     from
     Ft.Lib
    
     import
     cDomlette as dom4


  “标准”技术是使用 minidom (尽管在 Python 2.0 的前这还没有明确) pulldom 构建在 minidom 的上但是可以有选择地构建子树4Suite pDomlette 大体上等价于 minidom 但可能存在些 API 差异此外4Suite 工具依赖于 pDomlette cDomlette 可能是种更快构建 DOM 树思路方法但目前是测试版并且可能不能和其它模块完全 API 兼容

  糊涂了?我也是但是如果您能假设不存在 4Suite那么就使用 Python 标准导入;如果正在使用 4Suite您或许会使用更高级模块它们将负责导入要使用 DOM

  4XSLT

  最通用执行 XSLT 转换 4Suite 工具 4XSLT 是命令行版本源代码值得看:

  4XSLT Python 命令行脚本    
     #!/usr/bin/env python
    
    
     
from
     xml.xslt
    
     import
     _4xslt
_4xslt.XsltCommandLineApp.run


  这两行代码就是您创建 XSLT 转换引擎命令行版本所需要全部脚本并且实现步骤在 CGI 或其它 Web 服务器环境中都非常类似或可将实现步骤作为批处理个部分在 4Suite 包中就有个命令行工具类似于诸如 Sablotron(sabcmd)、Saxon 或 Xalan 工具当然拥有个用 Python 写工具很不错尤其是当您是个 Python 员时

  通过传递 --help 选项可以查看 4XSLT 允许命令行选项这些选项非常类似于其它命令行处理器验证是可选URL 可以作为参数指定这允许您在因特网上任何 XML 文档上执行任何类型转换这些转换都比较方便例如:

  4XSLT 作为命令行工具运行

% 4xslt -i http://gnosis.cx/publish/mertz/chap5.xml
      http://gnosis.cx/publish/mertz/chapter.xsl


  上面脚本将由 Sablotron(sabcmd)静态生成完全相同 HTML 文档发送到 STDOUT 该文档位于 http://gnosis.cx/publish/mertz/chap5.html (在 XML 问题#5 中讨论过请参阅 参考资料)

  将 4XSLT 转换合并到更大 Python 应用中同样容易基本上员只需要挑选个样式表然后对 XML 文档运行转换例如:

  4XSLT 使用方法样本 Python 代码片段    
     from
     xml.xslt.Processor
    
     import
     Processor
proc1,proc2 = Processor,Processor
proc1.appendStylesheetUri(
    
     'mime.xsl'
    )
result1 = processor.runUri(
    
     'message.xml'
    )
proc2.appendStylesheetString(open('mime.xsl').read)
result2 = proc2.runString(open('message.xml').read)
    
     pr
     result1,result2


  而且由于 4XSLT 转换是基于内存中 DOM 树因此只对该树个节点应用 XSLT 转换也同样简单如果希望依照转换来变更 DOM 子树请使用 Processor .runNode 思路方法;如果只希望返回转换结果请使用 .execute 思路方法

  4xupdate

  4Suite 包中个小命令行工具实用称为 4xupdate XUpdate 规范标准提供了 SQL UPDATE 或 INSERT 语句种模拟但它用于 XML 文档而不是关系数据库在这个规范标准幕后思想是提供种对 XML 文档做微小更改轻量型思路方法这种思路方法不需要 SAX 或 DOM 思路方法所需大量定制编程XUpdate 指令在 XML 中指定其自身这点很象 XSLT ― XPath 路径用于指定操作文档位置

  4XPath

  XPath 是在 XML 文档内描述节点路径通用规范标准XPath 规范标准是 XSLT 组成部分但它也用作其它 XML 技术部分例如当我决定为先前专栏文章中大型 XML 文档开发个索引生成器时显然会选择 XPath 作为描述 XML 各部分语法

  随 4Suite 起提供 xml.xpath 模块为涉及 XPath 描述步编程提供了个封装器虽然 XPath 不需要 DOM 框架但是 4XPath 提供系列处理 DOM 树实用XPath 描述可以针对 DOM 树(或子树)运行并将返回和描述匹配节点对象列表例如:

  处理 XPath 节点匹配 Python 代码片断    
     from
     xml.dom.ext.reader
    
     import
     PyExpat
    
     from
     xml.xpath
    
     import
     Evaluate
reader = PyExpat.Reader
dom = reader.fromString(some_function_to_get_XML)
path_descript =
    
     '/this/that/other'
    
    
     
for
     node
    
     in
     Evaluate(path_descript, dom.documentElement):
    
     
     # do something with each matched node
    


  上述代码片断(从 4Suite 演示中改编)递归遍历 DOM 树查找具有 <that> 父节点和 <this> 祖父节点 <other> 元素但是通常只对我们感兴趣节点给出个 XPath 描述要容易得多



  4ODS

  在本文中我将只给出 ODS 简短概述主要是 4ODS 实际上并不是特定于 XML 技术;另外这部分有许多附带问题在很大程度上4ODS 是 4Suite 部分 4Suite Server 期望它可用

  4ODS 功能有点类似于 ZODB 功能实际上4ODS 稍微简单些它可以和 shelve 或 xml_pickle 作比较(即 4ODS 不包括本地事务性能力)基本上4ODS 是种可以用来使 Python 对象在应用运行期间保持持久性思路方法当值得保持持久性时(用许多语言实现都很困难)其它 Python 工具都能很好地处理对象持久性4ODS 特别的处在于它专门实现了 ODMG 对象数据标准(Object Data Standard)v3.0(其它工具都无意实现)除此的外ODMG 标准使用 .odl 文件中对象格式规范标准如果您希望或者需要除诸如 shelve 或 pickle 特别思路方法以外4ODS 允许更正式持续对象设计

  4RDF

  RDF 是种创建有关 XML 文档“元数据”思路方法4RDF 包括个库和个命令行工具( 4rdf )用于处理“资源描述框架(Resource Description Framework)”当然RDF 文档本身是 XML 格式要较好地了解 RDF 用途请阅读 Uche Ogbuji 有关该主题 developerWorks 专栏文章(请参阅 参考资料)

  结束语

  4Suite 库为 Python/XML 工具箱添加了许多高级能力4XSLT 弥补了本机 Python XML 工具个非常明显缺陷其它些 4Suite 工具涉及了更多特定领域但是如果您应用涉及这些特定领域那么您有必要去研究下它们



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: