代码之家  ›  专栏  ›  技术社区  ›  John Mee

哪个XML库用于什么目的?

  •  8
  • John Mee  · 技术社区  · 15 年前

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

    此列表可能有问题:

    • xml.dom文件
    • XML.etree文件
    • xml.sax文件
    • xml.parsers.expat格式
    • PyXML
    • 漂亮的汤?
    • HTML分析器
    • HTML库
    • sgmllib库

    如果有人能提供一个关于什么时候使用它以及为什么使用它的快速摘要,那就好了。

    4 回复  |  直到 10 年前
        1
  •  7
  •   Peter Lyons    15 年前

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

    DOM :将整个文档读取到内存中并进行操作。 适用于:

    • 标记中标记之间的复杂关系
    • 小型复杂的XML文档
    • 注意事项:
      • 易用内存过多

    萨克斯 :阅读时分析文档。适用于:

    • 长文档或开放式流
    • 内存受限的位置
    • 注意事项:
      • 您需要编写一个有状态的解析器,这可能很棘手。

    清汤 :

    很适合HTML或者格式不太好的标记。使用方便,速度快。对于屏幕抓取等很好。它可以与基于XML的标记一起使用,而基于XML的标记只会通过错误地说标记是不正确的。

    其余的大部分我都没用过,但我觉得在什么时候用哪一种并没有硬性规定。只是您的标准考虑:谁来维护代码,您认为最容易使用哪些API,它们的工作情况如何,等等。

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

        2
  •  4
  •   Alex Martelli    15 年前

    我发现 xml.etree 基本上足够了,除了 BeautifulSoup 如果我需要分析 破碎的 XML(这不是一个常见的问题,不同于破损的HTML,漂亮的HTML还有助于 Everywhere):它对读取内存中的整个XML文档、导航它们、创建它们、增量解析大型文档都有合理的支持。 lxml 支持相同的接口,而且通常速度更快——当您能够负担得起安装第三方python扩展时(例如,不能安装的应用程序引擎——但xml.etree仍然存在,因此您可以运行完全相同的代码),这对提高性能很有用。 LXML 也有更多的特色,并提供美丽的汤。

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

        3
  •  1
  •   Charles Merriam    15 年前

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

    对于其他一切,都有lxml。具体来说,LXML最适合分析中断的HTML、XHTML或可疑源。它使用libxml2和libxslt处理xpath、xslt和exslt。教程很清楚,界面简单明了。所提到的其余库都存在,因为LXML在其当前表单中不可用。

    这是我的意见。

        4
  •  1
  •   J0e3gan    10 年前

    我对XML不太了解,但是当我需要时, lxml 和他一起工作很愉快,而且很快。元素树API在面向对象的设置中非常好。