【问题标题】:Parse XML with lxml, and then manipulate it with cElementTree用 lxml 解析 XML,然后用 cElementTree 操作它
【发布时间】:2014-07-09 09:47:10
【问题描述】:

我有一个应用程序,它不断地从文件中重新加载大量 XML 数据,然后执行操作,然后写回文件。

lxml 库在解析和反解析 XML 方面被证明要快得多,但 cElementTree 对于某些类型的操作要快得多。两者都有几乎相同的 API。

如何使用 lxml 解析 XML 文件,然后使用 cElementTree 对其进行操作?

这是我尝试过的,但是 lxml 解析方法生成的对象固有地使用它自己的操作方法。

import xml.etree.cElementTree as ET
from lxml import etree as lxmlET

【问题讨论】:

    标签: python xml lxml elementtree celementtree


    【解决方案1】:

    这个问题在 Python 中可能相当于“我的朋友有一辆很快的车,而我只有一辆旧车。我怎样才能让我的车开得和她的一样快?”

    我并不是说这不能做到,但我应该将这样的企业称为雄心勃勃或鲁莽,这取决于您的编程技能水平。正如您所发现的,关键是每个系统都有自己的解析 XML 的内部表示。

    虽然可以编写代码来获取由 lxml 生成的已解析对象并将其重新创建或包装为 ElementTree 元素,但它可能会 a) 首先使用 ElementTree 进行解析,并且 b ) 成为维护的噩梦。

    所以帮自己一个忙,选择一种技术,然后坚持下去(至少对于每个单独的程序)。

    我还要指出,XML 的主要目的是作为一种数据交换语言。您似乎将其用作结构化数据存储库这一事实不可避免地会导致处理效率低下,尤其是在数据量增加时。选择一些更合适的表示然后只将其转换为 XML 以供其他系统输出和使用会更好吗?

    【讨论】:

    • 感谢您的回答。但我怀疑从 XML -> lxml -> ElementTree 转换会比直接从 XML -> ElementTree 更快,如果进行某种内部重命名,可以强制 lxml 对象使用 ElementTree 方法。
    • 回答您的最后一个问题,我的应用程序不断与另一个应用程序交互,并且数据交换相当频繁,因此我坚持使用 XML。
    • 很公平。但我担心,单独重命名并不能弥补两个系统之间的漏洞。欢迎您尝试。顺便说一下,我们谈论了多少 XML?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多