第 23 章 结构化文本 结构化文本XML
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
XML,即 可扩展标记语言,是一种广泛使用的数据交换格式。除 XML 本身外,XML 社区(主要在万维网联盟(W3C)内)还对许多其他技术进行了标准化,如模式语言、命名空间、XPath、XLink、XPointer 和 XSLT。
此外,行业联盟还在 XML 的基础上定义了特定行业的标记语言,用于在各自领域的应用程序之间交换数据。XML、基于 XML 的标记语言和其他 XML 相关技术通常用于特定领域的跨应用、跨语言、跨平台数据交换。
由于历史原因,Python 的标准库在xml包下有多个支持 XML 的模块,这些模块的功能相互重叠;本书没有涵盖所有模块,但感兴趣的读者可以在在线文档中找到详细信息。
本书(特别是本章)只涉及最 Python 的 XML 处理方法:ElementTree 是由被人们深深怀念的 Fredrik Lundh 创建的,他以 "effbot "而闻名。1它的优雅、速度、通用性、多种实现和 Python 架构使其成为 Python XML 应用程序的首选软件包。除本章提供的内容外,有关xml.etree.ElementTree模块的教程和完整细节,请参阅在线文档。如果您需要了解 XML 的更多信息,我们推荐 Elliotte Rusty Harold 和 W. Scott Means 所著的《XML in a Nutshell》(O'Reilly 出版社)。
解析来自不可信来源的 XML 会使您的应用程序面临许多可能的攻击风险。我们没有专门讨论这个问题,但在线文档推荐了第三方模块,如果您确实需要解析来自不可完全信任来源的 XML,这些模块可以帮助保护您的应用程序。特别是,如果您需要一个可防止解析不信任来源的ElementTree实现,请考虑使用defusedxml.ElementTree 模块。
元素树
Python 和第三方附加组件提供了多种ElementTree功能的替代实现;在 标准库中,您可以始终依赖的是xml.etree.ElementTree 模块。只要导入xml.etree.ElementTree,就能在 Python 安装的标准库中获得最快的实现。本章引言中提到的第三方软件包defusedxml 提供了稍慢但更安全的实现,如果您需要解析来自不可靠来源的 XML;另一个第三方软件包lxml 可以让您获得更快的性能,并通过lxml.etree 获得一些额外的功能。
传统上,您可以使用from...import...as这样的语句来获取您喜欢的ElementTree可用实现:
fromxml.etreeimportElementTreeaset
或者这个,它会尝试导入lxml,如果无法导入,就退回到标准库中提供的版本:
try:fromlxmlimportetreeasetexceptImportError:fromxml.etreeimportElementTreeaset
成功导入一个实现后,在其余代码中使用它作为et(有些人更喜欢大写的变体ET)。
ElementTree提供了一个基本类,代表树中的一个节点,自然映射 XML 文档:Element 类。ElementTree还提供了其他重要类,主要是代表整个树的类,该类具有输入和输出方法,以及许多与Element 根类相同的方便类--这就是ElementTree ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access