xml.dom — 文件物件模型 API

原始碼: Lib/xml/dom/__init__.py


文件物件模型 (Document Object Model,簡稱 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 Level 1 完全沒有涵蓋如何實現這一點,Level 2 只提供了有限的改進:有一個 DOMImplementation 物件類,它提供了對 Document 建立方法的訪問,但沒有辦法以獨立於實現的方式訪問 XML 讀取器/解析器/文件構建器。也沒有明確定義的方法可以在沒有現有 Document 物件的情況下訪問這些方法。在 Python 中,每個 DOM 實現都將提供一個函式 getDOMImplementation()。DOM Level 3 增加了載入/儲存規範,它定義了與讀取器的介面,但這在 Python 標準庫中尚不可用。

一旦您有了 DOM 文件物件,您就可以透過其屬性和方法訪問 XML 文件的各個部分。這些屬性在 DOM 規範中定義;本參考手冊的這一部分描述了該規範在 Python 中的解釋。

W3C 提供的規範定義了 Java、ECMAScript 和 OMG IDL 的 DOM API。這裡定義的 Python 對映很大程度上基於規範的 IDL 版本,但不需要嚴格遵守(儘管實現可以自由支援 IDL 的嚴格對映)。有關對映要求的詳細討論,請參閱 一致性 部分。

參見

文件物件模型 (DOM) 級別 2 規範

Python DOM API 所基於的 W3C 推薦。

文件物件模型 (DOM) 級別 1 規範

xml.dom.minidom 支援的 DOM 的 W3C 推薦。

Python 語言對映規範

這指定了從 OMG IDL 到 Python 的對映。

模組內容

xml.dom 包含以下函式

xml.dom.registerDOMImplementation(name, factory)

用名稱 name 註冊 factory 函式。工廠函式應該返回一個實現 DOMImplementation 介面的物件。工廠函式可以每次返回相同的物件,也可以根據具體實現的需要(例如,如果該實現支援某種自定義)為每次呼叫返回一個新物件。

xml.dom.getDOMImplementation(name=None, features=())

返回一個合適的 DOM 實現。name 可以是眾所周知的名稱、DOM 實現的模組名稱,也可以是 None。如果它不是 None,則匯入相應的模組,如果匯入成功,則返回一個 DOMImplementation 物件。如果沒有給出名稱,並且設定了環境變數 PYTHON_DOM,則使用此變數來查詢實現。

如果未給出名稱,則檢查可用的實現以查詢具有所需功能集的實現。如果找不到實現,則引發 ImportError。功能列表必須是 (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 屬性也可以作為節點而不是簡單的字串進行操作。但是,您必須這樣做的情況非常罕見,因此此用法尚未記錄。

介面

用途

DOMImplementation

DOMImplementation 物件

底層實現的介面。

Node

Node 物件

文件中大多數物件的基本介面。

NodeList

NodeList 物件

節點序列的介面。

DocumentType

DocumentType 物件

處理文件所需的宣告資訊。

Document

Document 物件

表示整個文件的物件。

Element

Element 物件

文件層次結構中的元素節點。

Attr

Attr 物件

元素節點上的屬性值節點。

註釋

Comment 物件

源文件中註釋的表示。

Text

Text 和 CDATASection 物件

包含文件中文字內容的節點。

ProcessingInstruction

ProcessingInstruction 物件

處理指令表示。

一個附加部分描述了在 Python 中使用 DOM 時定義的異常。

DOMImplementation 物件

DOMImplementation 介面提供了一種方法,讓應用程式可以確定其正在使用的 DOM 中特定功能的可用性。DOM Level 2 還增加了使用 DOMImplementation 建立新的 DocumentDocumentType 物件的能力。

DOMImplementation.hasFeature(feature, version)

如果實現了由字串對 featureversion 標識的功能,則返回 True

DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)

返回一個新的 Document 物件(DOM 的根),其子 Element 物件具有給定的 namespaceUriqualifiedNamedoctype 必須是由 createDocumentType() 建立的 DocumentType 物件,或 None。在 Python DOM API 中,前兩個引數也可以是 None,以指示不建立 Element 子節點。

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

返回一個新的 DocumentType 物件,該物件封裝了給定的 qualifiedNamepublicIdsystemId 字串,表示 XML 文件型別宣告中包含的資訊。

Node 物件

XML 文件的所有元件都是 Node 的子類。

Node.nodeType

一個表示節點型別的整數。這些型別的符號常量位於 Node 物件上:ELEMENT_NODEATTRIBUTE_NODETEXT_NODECDATA_SECTION_NODEENTITY_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODEDOCUMENT_NODEDOCUMENT_TYPE_NODENOTATION_NODE。這是一個只讀屬性。

Node.parentNode

當前節點的父節點,如果文件節點沒有父節點,則為 None。該值始終是 Node 物件或 None。對於 Element 節點,這將是父元素,除了根元素,在這種情況下它將是 Document 物件。對於 Attr 節點,這始終是 None。這是一個只讀屬性。

Node.attributes

屬性物件的 NamedNodeMap。只有元素對此有實際值;其他元素此屬性為 None。這是一個只讀屬性。

Node.previousSibling

與此節點具有相同父節點的緊鄰前一個節點。例如,結束標籤剛好在 self 元素的開始標籤之前的元素。當然,XML 文件不僅僅由元素組成,因此前一個同級節點可以是文字、註釋或其他內容。如果此節點是父節點的第一個子節點,則此屬性將為 None。這是一個只讀屬性。

Node.nextSibling

與此節點具有相同父節點的緊隨其後的節點。另請參閱 previousSibling。如果此節點是父節點的最後一個子節點,則此屬性將為 None。這是一個只讀屬性。

Node.childNodes

此節點中包含的節點列表。這是一個只讀屬性。

Node.firstChild

節點的第一個子節點(如果有),否則為 None。這是一個只讀屬性。

Node.lastChild

節點的最後一個子節點(如果有),否則為 None。這是一個只讀屬性。

Node.localName

tagName 中冒號後面的部分(如果有),否則是整個 tagName。該值是一個字串。

Node.prefix

tagName 中冒號前面的部分(如果有),否則是空字串。該值是一個字串或 None

Node.namespaceURI

與元素名稱關聯的名稱空間。這將是一個字串或 None。這是一個只讀屬性。

Node.nodeName

這對於每種節點型別都有不同的含義;詳情請參閱 DOM 規範。您始終可以從其他屬性(例如元素的 tagName 屬性或屬性的 name 屬性)獲取此處的資訊。對於所有節點型別,此屬性的值將是字串或 None。這是一個只讀屬性。

Node.nodeValue

這對於每種節點型別都有不同的含義;詳情請參閱 DOM 規範。情況類似於 nodeName。該值是一個字串或 None

Node.hasAttributes()

如果節點有任何屬性,則返回 True

Node.hasChildNodes()

如果節點有任何子節點,則返回 True

Node.isSameNode(other)

如果 other 指的是與此節點相同的節點,則返回 True。這對於使用任何代理架構的 DOM 實現特別有用(因為多個物件可以引用同一個節點)。

備註

這基於一個提議的 DOM Level 3 API,該 API 仍處於“工作草案”階段,但這個特定的介面似乎沒有爭議。W3C 的更改不一定會影響 Python DOM 介面中的此方法(儘管任何新的 W3C API 也會得到支援)。

Node.appendChild(newChild)

將一個新子節點新增到此節點的子節點列表末尾,返回 newChild。如果該節點已經存在於樹中,則會先將其移除。

Node.insertBefore(newChild, refChild)

在一個現有子節點之前插入一個新子節點。refChild 必須是此節點的子節點;如果不是,則會引發 ValueError。返回 newChild。如果 refChildNone,則將 newChild 插入到子節點列表的末尾。

Node.removeChild(oldChild)

移除一個子節點。oldChild 必須是此節點的子節點;如果不是,則會引發 ValueError。成功時返回 oldChild。如果 oldChild 將不再使用,應呼叫其 unlink() 方法。

Node.replaceChild(newChild, oldChild)

用新節點替換現有節點。oldChild 必須是此節點的子節點;如果不是,則會引發 ValueError

Node.normalize()

合併相鄰的文字節點,使所有連續的文字都儲存為單個 Text 例項。這簡化了許多應用程式從 DOM 樹處理文字。

Node.cloneNode(deep)

克隆此節點。設定 deep 表示也克隆所有子節點。這會返回克隆。

NodeList 物件

NodeList 表示一個節點序列。這些物件在 DOM Core 推薦中有兩種用法:一個 Element 物件提供一個作為其子節點列表,而 NodegetElementsByTagName()getElementsByTagNameNS() 方法返回具有此介面的物件來表示查詢結果。

DOM Level 2 推薦為這些物件定義了一個方法和一個屬性

NodeList.item(i)

從序列中返回第 i 個專案(如果有),否則返回 None。索引 i 不允許小於零或大於等於序列的長度。

NodeList.length

序列中的節點數量。

此外,Python DOM 介面要求提供一些額外的支援,以允許將 NodeList 物件用作 Python 序列。所有 NodeList 實現都必須包含對 __len__()__getitem__() 的支援;這允許在 for 語句中迭代 NodeList,並正確支援內建函式 len()

如果 DOM 實現支援文件修改,則 NodeList 實現還必須支援 __setitem__()__delitem__() 方法。

DocumentType 物件

透過 DocumentType 物件可以獲取有關文件宣告的符號和實體的資訊(包括外部子集,如果解析器使用它並能提供資訊的話)。文件的 DocumentType 可從 Document 物件的 doctype 屬性獲取;如果文件沒有 DOCTYPE 宣告,則文件的 doctype 屬性將設定為 None,而不是此介面的例項。

DocumentTypeNode 的特化,並添加了以下屬性

DocumentType.publicId

文件型別定義外部子集的公共識別符號。這將是一個字串或 None

DocumentType.systemId

文件型別定義外部子集的系統識別符號。這將是一個字串形式的 URI,或 None

DocumentType.internalSubset

一個字串,表示文件中完整的內部子集。這不包括包圍子集的方括號。如果文件沒有內部子集,此屬性應為 None

DocumentType.name

DOCTYPE 宣告中給出的根元素的名稱(如果存在)。

DocumentType.entities

這是一個 NamedNodeMap,給出了外部實體的定義。對於多次定義的實體名稱,只提供第一個定義(根據 XML 推薦,其他定義將被忽略)。如果解析器未提供資訊或未定義任何實體,則此屬性可能為 None

DocumentType.notations

這是一個 NamedNodeMap,給出了符號的定義。對於多次定義的符號名稱,只提供第一個定義(根據 XML 推薦,其他定義將被忽略)。如果解析器未提供資訊或未定義任何符號,則此屬性可能為 None

Document 物件

Document 表示整個 XML 文件,包括其組成元素、屬性、處理指令、註釋等。請記住,它繼承了 Node 的屬性。

Document.documentElement

文件唯一的根元素。

Document.createElement(tagName)

建立並返回一個新的元素節點。元素建立時不會插入到文件中。您需要使用其他方法(例如 insertBefore()appendChild())顯式地插入它。

Document.createElementNS(namespaceURI, tagName)

建立並返回一個帶名稱空間的新元素。tagName 可以有字首。元素建立時不會插入到文件中。您需要使用其他方法(例如 insertBefore()appendChild())顯式地插入它。

Document.createTextNode(data)

建立並返回一個包含作為引數傳遞的資料的文字節點。與其他建立方法一樣,此方法不會將節點插入到樹中。

Document.createComment(data)

建立並返回一個包含作為引數傳遞的資料的註釋節點。與其他建立方法一樣,此方法不會將節點插入到樹中。

Document.createProcessingInstruction(target, data)

建立並返回一個包含作為引數傳遞的 targetdata 的處理指令節點。與其他建立方法一樣,此方法不會將節點插入到樹中。

Document.createAttribute(name)

建立並返回一個屬性節點。此方法不將屬性節點與任何特定元素關聯。您必須在適當的 Element 物件上使用 setAttributeNode() 來使用新建立的屬性例項。

Document.createAttributeNS(namespaceURI, qualifiedName)

建立並返回一個帶名稱空間的屬性節點。tagName 可以有字首。此方法不將屬性節點與任何特定元素關聯。您必須在適當的 Element 物件上使用 setAttributeNode() 來使用新建立的屬性例項。

Document.getElementsByTagName(tagName)

搜尋所有具有特定元素型別名稱的後代(直接子節點、子節點的子節點等)。

Document.getElementsByTagNameNS(namespaceURI, localName)

搜尋所有具有特定名稱空間 URI 和本地名稱的後代(直接子節點、子節點的子節點等)。本地名稱是名稱空間中字首之後的部分。

Element 物件

ElementNode 的子類,因此繼承了該類的所有屬性。

Element.tagName

元素型別名稱。在使用了名稱空間的文件中,它可能包含冒號。該值是一個字串。

Element.getElementsByTagName(tagName)

Document 類中的同名方法相同。

Element.getElementsByTagNameNS(namespaceURI, localName)

Document 類中的同名方法相同。

Element.hasAttribute(name)

如果元素具有由 name 命名的屬性,則返回 True

Element.hasAttributeNS(namespaceURI, localName)

如果元素具有由 namespaceURIlocalName 命名的屬性,則返回 True

Element.getAttribute(name)

以字串形式返回由 name 命名的屬性的值。如果不存在這樣的屬性,則返回一個空字串,就像該屬性沒有值一樣。

Element.getAttributeNode(attrname)

返回由 attrname 命名的屬性的 Attr 節點。

Element.getAttributeNS(namespaceURI, localName)

以字串形式返回由 namespaceURIlocalName 命名的屬性的值。如果不存在這樣的屬性,則返回一個空字串,就像該屬性沒有值一樣。

Element.getAttributeNodeNS(namespaceURI, localName)

給定 namespaceURIlocalName,將屬性值作為節點返回。

Element.removeAttribute(name)

按名稱刪除屬性。如果沒有匹配的屬性,則會引發 NotFoundErr

Element.removeAttributeNode(oldAttr)

從屬性列表中移除並返回 oldAttr(如果存在)。如果 oldAttr 不存在,則會引發 NotFoundErr

Element.removeAttributeNS(namespaceURI, localName)

按名稱刪除屬性。請注意,它使用 localName,而不是 qname。如果沒有匹配的屬性,則不會引發異常。

Element.setAttribute(name, value)

從字串設定屬性值。

Element.setAttributeNode(newAttr)

向元素新增一個新的屬性節點,如果必要,當 name 屬性匹配時替換現有屬性。如果發生替換,將返回舊的屬性節點。如果 newAttr 已在使用中,則會引發 InuseAttributeErr

Element.setAttributeNodeNS(newAttr)

向元素新增一個新的屬性節點,如果必要,當 namespaceURIlocalName 屬性匹配時替換現有屬性。如果發生替換,將返回舊的屬性節點。如果 newAttr 已在使用中,則會引發 InuseAttributeErr

Element.setAttributeNS(namespaceURI, qname, value)

給定 namespaceURIqname,從字串設定屬性值。請注意,qname 是整個屬性名稱。這與上面不同。

Attr 物件

Attr 繼承自 Node,因此繼承了其所有屬性。

Attr.name

屬性名稱。在使用了名稱空間的文件中,它可能包含冒號。

Attr.localName

名稱中冒號後面的部分(如果有),否則是整個名稱。這是一個只讀屬性。

Attr.prefix

名稱中冒號前面的部分(如果有),否則是空字串。

Attr.value

屬性的文字值。這是 nodeValue 屬性的同義詞。

NamedNodeMap 物件

NamedNodeMap 繼承自 Node

NamedNodeMap.length

屬性列表的長度。

NamedNodeMap.item(index)

返回具有特定索引的屬性。您獲取屬性的順序是任意的,但在 DOM 的生命週期內將保持一致。每個專案都是一個屬性節點。使用 value 屬性獲取其值。

還有一些實驗性方法使此類具有更多的對映行為。您可以使用它們,也可以使用 Element 物件上標準化的 getAttribute*() 系列方法。

Comment 物件

Comment 表示 XML 文件中的註釋。它是 Node 的子類,但不能有子節點。

Comment.data

註釋的內容作為字串。該屬性包含前導 <!-- 和尾隨 --> 之間的所有字元,但不包括它們。

Text 和 CDATASection 物件

Text 介面表示 XML 文件中的文字。如果解析器和 DOM 實現支援 DOM 的 XML 擴充套件,則 CDATA 標記部分中包含的部分文字儲存在 CDATASection 物件中。這兩個介面是相同的,但為 nodeType 屬性提供不同的值。

這些介面擴充套件了 Node 介面。它們不能有子節點。

Text.data

文字節點的內容作為字串。

備註

使用 CDATASection 節點並不表示該節點代表一個完整的 CDATA 標記部分,只表示該節點的內容是 CDATA 部分的一部分。一個 CDATA 部分可能由文件樹中的多個節點表示。無法確定兩個相鄰的 CDATASection 節點是否代表不同的 CDATA 標記部分。

ProcessingInstruction 物件

表示 XML 文件中的處理指令;這繼承自 Node 介面,不能有子節點。

ProcessingInstruction.target

處理指令的內容,直到第一個空白字元。這是一個只讀屬性。

ProcessingInstruction.data

處理指令中第一個空白字元之後的內容。

異常

DOM Level 2 推薦定義了一個單一的異常 DOMException,以及許多常量,允許應用程式確定發生了何種錯誤。DOMException 例項帶有一個 code 屬性,該屬性提供特定異常的適當值。

Python DOM 介面提供了這些常量,但也擴充套件了異常集,為 DOM 定義的每個異常程式碼都存在一個特定的異常。實現必須引發適當的特定異常,每個異常都帶有 code 屬性的適當值。

exception xml.dom.DOMException

所有特定 DOM 異常的基礎異常類。此異常類不能直接例項化。

exception xml.dom.DomstringSizeErr

當指定的文字範圍不適合字串時引發。已知 Python DOM 實現中不使用此功能,但可能從非 Python 編寫的 DOM 實現中接收到。

exception xml.dom.HierarchyRequestErr

當嘗試插入節點時,如果節點型別不允許,則引發。

exception xml.dom.IndexSizeErr

當方法的索引或大小引數為負或超出允許值時引發。

exception xml.dom.InuseAttributeErr

當嘗試插入已存在於文件其他位置的 Attr 節點時引發。

exception xml.dom.InvalidAccessErr

如果底層物件不支援某個引數或操作,則引發。

exception xml.dom.InvalidCharacterErr

當字串引數包含的字元在 XML 1.0 推薦標準中不被允許用於其上下文時,會引發此異常。例如,嘗試建立一個元素型別名稱中帶空格的 Element 節點將導致此錯誤。

exception xml.dom.InvalidModificationErr

當嘗試修改節點型別時引發。

exception xml.dom.InvalidStateErr

當嘗試使用未定義或不再可用的物件時引發。

exception xml.dom.NamespaceErr

如果嘗試以與 Namespaces in XML 推薦標準不符的方式修改任何物件,則會引發此異常。

exception xml.dom.NotFoundErr

當節點在引用上下文中不存在時引發的異常。例如,如果傳入的節點在對映中不存在,NamedNodeMap.removeNamedItem() 將引發此異常。

exception xml.dom.NotSupportedErr

當實現不支援所請求的物件型別或操作時引發。

exception xml.dom.NoDataAllowedErr

如果為不支援資料的節點指定了資料,則會引發此異常。

exception xml.dom.NoModificationAllowedErr

當嘗試修改不允許修改的物件(例如只讀節點)時引發。

exception xml.dom.SyntaxErr

當指定了無效或非法的字串時引發。

exception xml.dom.WrongDocumentErr

當節點插入到其當前所屬的不同文件中,並且實現不支援將節點從一個文件遷移到另一個文件時引發。

DOM 推薦標準中定義的異常程式碼根據下表對映到上述異常

常量

Exception

DOMSTRING_SIZE_ERR

DomstringSizeErr

HIERARCHY_REQUEST_ERR

HierarchyRequestErr

INDEX_SIZE_ERR

IndexSizeErr

INUSE_ATTRIBUTE_ERR

InuseAttributeErr

INVALID_ACCESS_ERR

InvalidAccessErr

INVALID_CHARACTER_ERR

InvalidCharacterErr

INVALID_MODIFICATION_ERR

InvalidModificationErr

INVALID_STATE_ERR

InvalidStateErr

NAMESPACE_ERR

NamespaceErr

NOT_FOUND_ERR

NotFoundErr

NOT_SUPPORTED_ERR

NotSupportedErr

NO_DATA_ALLOWED_ERR

NoDataAllowedErr

NO_MODIFICATION_ALLOWED_ERR

NoModificationAllowedErr

SYNTAX_ERR

SyntaxErr

WRONG_DOCUMENT_ERR

WrongDocumentErr

符合性

本節描述了 Python DOM API、W3C DOM 推薦標準以及 OMG IDL 到 Python 的對映之間的符合性要求和關係。

型別對映

DOM 規範中使用的 IDL 型別根據下表對映到 Python 型別。

IDL 型別

Python 型別

boolean

boolint

int

int

long int

int

unsigned int

int

DOMString

strbytes

None

訪問器方法

OMG IDL 到 Python 的對映定義了 IDL attribute 宣告的訪問器函式,其方式與 Java 對映非常相似。對映 IDL 宣告

readonly attribute string someValue;
         attribute string anotherValue;

產生三個訪問器函式:一個用於 someValue 的“獲取”方法 (_get_someValue()),以及用於 anotherValue 的“獲取”和“設定”方法 (_get_anotherValue()_set_anotherValue())。此對映尤其不要求 IDL 屬性可作為普通 Python 屬性訪問:object.someValue 被要求工作,並且可能會引發 AttributeError

然而,Python DOM API 確實 要求普通屬性訪問能夠工作。這意味著 Python IDL 編譯器生成的典型代理可能無法工作,並且如果 DOM 物件透過 CORBA 訪問,客戶端可能需要包裝物件。雖然這確實對 CORBA DOM 客戶端需要一些額外的考慮,但有透過 Python 使用 CORBA DOM 經驗的實現者並不認為這是一個問題。宣告為 readonly 的屬性可能不會在所有 DOM 實現中限制寫入訪問。

在 Python DOM API 中,不需要訪問器函式。如果提供,它們應採用 Python IDL 對映定義的格式,但由於屬性可以直接從 Python 訪問,這些方法被認為是不必要的。readonly 屬性不應提供“設定”訪問器。

IDL 定義並未完全體現 W3C DOM API 的要求,例如某些物件(如 getElementsByTagName() 的返回值)“即時”的概念。Python DOM API 不要求實現強制執行此類要求。