python:xml.dom --- 文档对象模型 API

DOM是一个跨语言的API,用于处理XML文档。Python的xml.dom模块提供了DOM的实现,允许用户创建、访问和修改XML文档的结构。该模块包含DOMImplementation对象、节点对象、文档对象等,支持节点的添加、删除、查找等操作,并定义了各种异常。DOM适合于需要随机访问XML数据的应用,而SAX更适合流式处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


文档对象模型“DOM”是一个来自万维网联盟(W3C)的跨语言 API,用于访问和修改 XML 文档。 DOM 的实现将 XML 文档以树结构表示,或者允许客户端代码从头构建这样的结构。 然后它会通过一组提供通用接口的对象赋予对结构的访问权。

DOM 特别适用于进行随机访问的应用。 SAX 仅允许你每次查看文档的一小部分。 如果你正在查看一个 SAX 元素,你将不能访问其他元素。 如果你正在查看一个文本节点,你将不能访问包含它的元素。 当你编写一个 SAX 应用时,你需要在你自己的代码的某个地方记住你的程序在文档中的位置。 SAX 不会帮你做这件事。 并且,如果你想要在 XML 文档中向前查看,你是绝对办不到的。

有些应用程序在不能访问树的事件驱动模型中是根本无法编写的。 当然你可以在 SAX 事件中自行构建某种树,但是 DOM 可以使你避免编写这样的代码。 DOM 是针对 XML 数据的标准树表示形式。

文档对象模型是由 W3C 分阶段定义的,在其术语中称为“层级”。 Python 中该 API 的映射大致是基于 DOM 第 2 层级的建议。

DOM 应用程序通常从将某些 XML 解析为 DOM 开始。 此操作如何实现完全未被 DOM 第 1 层级所涉及,而第 2 层级也只提供了有限的改进:有一个 DOMImplementation 对象类,它提供对 Document 创建方法的访问,但却没有办法以不依赖具体实现的方式访问 XML 读取器/解析器/文档创建器。 也没有当不存在 Document 对象的情况下访问这些方法的定义良好的方式。 在 Python 中,每个 DOM 实现将提供一个函数 getDOMImplementation()。 DOM 第 3 层级增加了一个载入/存储规格说明,它定义了与读取器的接口,但这在 Python 标准库中尚不可用。

一旦你得到了 DOM 文档对象,你就可以通过 XML 文档的属性和方法访问它的各个部分。 这些属性定义在 DOM 规格说明当中;参考指南的这一部分描述了 Python 对此规格说明的解读。

W3C 提供的规格说明定义了适用于 Java, ECMAScript 和 OMG IDL 的 DOM API。 这里定义的 Python 映射很大程度上是基于此规格说明的 IDL 版本,但并不要求严格映射(但具体实现可以自由地支持对 IDL 的严格映射)。 请参阅 一致性 一节查看有关映射要求的详细讨论。

模块内容

xml.dom 包含下列函数:

xml.dom.registerDOMImplementation(name, factory)
注册 factory 函数并使用名称 name。 该工厂函数应当返回一个实现了 DOMImplementation 接口的对象。 该工厂函数可每次都返回相同对象,或每次调用都返回新的对象,视具体实现的要求而定(例如该实现是否支持某些定制功能)。

xml.dom.getDOMImplementation(name=None, features=())
返回一个适当的 DOM 实现。 name 是通用名称、DOM 实现的模块名称或者 None。 如果它不为 None,则会导入相应模块并在导入成功时返回一个 DOMImplementation 对象。 如果没有给出名称,并且如果设置了 PYTHON_DOM 环境变量,此变量会被用来查找相应的实现。

如果未给出 name,此函数会检查可用的实现来查找具有所需特性集的一个。 如果找不到任何实现,则会引发 ImportError。 features 集必须是包含 (feature, version) 对的序列,它会被传给可用的 DOMImplementation 对象上的 hasFeature() 方法。

还提供了一些便捷常量:

xml.dom.EMPTY_NAMESPACE
该值用于指明没有命名空间被关联到 DOM 中的某个节点。 它通常被作为某个节点的 namespaceURI,或者被用作某个命名空间专属方法的 namespaceURI 参数。

xml.dom.XML_NAMESPACE
关联到保留前缀 xml 的命名空间 URI,如 XML 中的命名空间 (第 4 节) 所定义的。

xml.dom.XMLNS_NAMESPACE
命名空间声明的命名空间 URI,如 文档对象模型 (DOM) 第 2 层级核心规格说明 (第 1.1.8节) 所定义的。

xml.dom.XHTML_NAMESPACE
XHTML 命名空间的 URI,如 XHTML 1.0: 扩展超文本标记语言 (第 3.1.1 节) 所定义的。

此外,xml.dom 还包含一个基本 Node 类和一些 DOM 异常类。 此模块提供的 Node 类未实现 DOM 规格描述所定义的任何方法和属性;实际的 DOM 实现必须提供它们。 提供 Node 类作为此模块的一部分并没有提供用于实际的 Node 对象的 nodeType 属性的常量;它们是位于类内而不是位于模块层级以符合 DOM 规格描述。

DOM 中的对象

DOM 的权威文档是来自 W3C 的 DOM 规格描述。

请注意,DOM 属性也可以作为节点而不是简单的字符串进行操作。 然而,必须这样做的情况相当少见,所以这种用法还没有被写入文档。
在这里插入图片描述

描述在 Python 中使用 DOM 定义的异常的小节。

DOMImplementation 对象

DOMImplementation 接口提供了一种让应用程序确定他们所使用的 DOM 中某一特性可用性的方式。 DOM 第 2 级还添加了使用 DOMImplementation 来创建新的 Document 和 DocumentType 对象的能力。

DOMImplementation.hasFeature(feature, version)
如果字符串对 feature 和 version 所标识的特性已被实现则返回 True。

DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)
返回一个新的 Document 对象 (DOM 的根节点),包含一个具有给定 namespaceUri 和 qualifiedName 的下级 Element 对象。 doctype 必须为由 createD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

实战大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值