出于什么目的,哪个XML库?

时间:2010-03-12 04:02:27

标签: python xml

搜索“python”和“xml”会返回各种用于组合这两者的库。

此列表可能有问题:

  • xml.dom的
  • xml.etree
  • xml.sax
  • xml.parsers.expat
  • 的PyXML
  • beautifulsoup?
  • 的HTMLParser
  • htmllib中
  • sgmllib中

如果有人可以快速总结何时使用哪个以及为什么,那就太好了。

4 个答案:

答案 0 :(得分:7)

DOM / SAX鸿沟是一个基本的分歧。它不仅适用于python,因为DOM和SAX是跨语言的。

DOM :将整个文档读入内存并进行操作。 适合:

  • 标记中标记之间的复杂关系
  • 小错综复杂的XML文档
  • 注意事项:
    • 易于使用过多的记忆

SAX :在阅读文档时解析文档。适合:

  • 长文件或开放式文集
  • 内存是约束的地方
  • 注意事项:
    • 你需要编写一个有状态的解析器,这可能很棘手

<强> beautifulsoup

非常适合HTML或不太完善的标记。易于使用和快速。适用于屏幕抓取等。它可以使用标记,其中基于XML的标记只是通过错误说标记不正确。

其余大多数我都没有使用过,但我认为关于何时使用它的规则并不严格。只是您的标准考虑因素:谁将维护代码,您认为哪些API最易于使用,它们的工作情况等等。

一般来说,对于基本需求,使用标准库模块很好,因为它们是“标准的”,因此可用且众所周知。但是,如果你需要深入研究某些东西,几乎总会有更新的非标准模块在标准库之外具有卓越的功能。

答案 1 :(得分:4)

我发现xml.etree基本上对所有内容都足够了,除了BeautifulSoup我需要解析损坏的 XML(不是常见的问题,不同于破碎的HTML,哪个是BeautifulSoup也有帮助和 无处不在):它有合理的支持在内存中读取整个XML文档,导航它们,创建它们,逐步解析大文档。 lxml支持相同的界面,并且通常更快 - 当你能负担得起安装第三方Python扩展时(如在App Engine上你不能 - 但是xml.etree仍然存在,那么推动性能很有用)所以你可以运行完全相同的代码)。 lxml也有更多功能,并提供BeautifulSoup。

您提到的其他库是为非常不同的语言设计的模仿API,一般来说,我认为没有理由将Python扭曲成这些旋转。如果您有非常具体的需求,例如支持xslt,各种验证等,那么可能值得四处寻找其他库,但是我很久没有这样的需求,所以我不是最新的为他们提供的产品。

答案 2 :(得分:1)

我对XML没有太多帮助,但是当我需要时,lxml一直很愉快,并且显然非常快。元素树API在面向对象的设置中非常好。

答案 3 :(得分:1)

对于许多问题,您可以使用xml。它的主要优点是成为标准库的一部分。这意味着它几乎预装在每个系统上,并且接口将是静态的。它不是最好的,也不是最快的,但它就在那里。

其他一切都有lxml。特别地,lxml最适合解析损坏的HTML,xHTML或可疑提要。它使用libxml2和libxslt来处理XPath,XSLT和EXSLT。该教程很清晰,界面简单直接。提到的其余库存在是因为lxml在当前形式下不可用。

这是我的意见。