xml.dom
— 文件物件模型 API¶
文件物件模型 (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 屬性也可以作為節點而不是簡單的字串進行操作。但是,您必須這樣做的情況非常罕見,因此此用法尚未記錄。
介面 |
節 |
用途 |
---|---|---|
|
底層實現的介面。 |
|
|
文件中大多數物件的基本介面。 |
|
|
節點序列的介面。 |
|
|
處理文件所需的宣告資訊。 |
|
|
表示整個文件的物件。 |
|
|
文件層次結構中的元素節點。 |
|
|
元素節點上的屬性值節點。 |
|
|
源文件中註釋的表示。 |
|
|
包含文件中文字內容的節點。 |
|
|
處理指令表示。 |
一個附加部分描述了在 Python 中使用 DOM 時定義的異常。
DOMImplementation 物件¶
DOMImplementation
介面提供了一種方法,讓應用程式可以確定其正在使用的 DOM 中特定功能的可用性。DOM Level 2 還增加了使用 DOMImplementation
建立新的 Document
和 DocumentType
物件的能力。
- DOMImplementation.hasFeature(feature, version)¶
如果實現了由字串對 feature 和 version 標識的功能,則返回
True
。
- DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)¶
返回一個新的
Document
物件(DOM 的根),其子Element
物件具有給定的 namespaceUri 和 qualifiedName。doctype 必須是由createDocumentType()
建立的DocumentType
物件,或None
。在 Python DOM API 中,前兩個引數也可以是None
,以指示不建立Element
子節點。
- DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)¶
返回一個新的
DocumentType
物件,該物件封裝了給定的 qualifiedName、publicId 和 systemId 字串,表示 XML 文件型別宣告中包含的資訊。
Node 物件¶
XML 文件的所有元件都是 Node
的子類。
- Node.nodeType¶
一個表示節點型別的整數。這些型別的符號常量位於
Node
物件上:ELEMENT_NODE
、ATTRIBUTE_NODE
、TEXT_NODE
、CDATA_SECTION_NODE
、ENTITY_NODE
、PROCESSING_INSTRUCTION_NODE
、COMMENT_NODE
、DOCUMENT_NODE
、DOCUMENT_TYPE_NODE
、NOTATION_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.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。如果 refChild 為None
,則將 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
物件提供一個作為其子節點列表,而 Node
的 getElementsByTagName()
和 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
,而不是此介面的例項。
DocumentType
是 Node
的特化,並添加了以下屬性
- 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)¶
建立並返回一個包含作為引數傳遞的 target 和 data 的處理指令節點。與其他建立方法一樣,此方法不會將節點插入到樹中。
- Document.createAttribute(name)¶
建立並返回一個屬性節點。此方法不將屬性節點與任何特定元素關聯。您必須在適當的
Element
物件上使用setAttributeNode()
來使用新建立的屬性例項。
- Document.createAttributeNS(namespaceURI, qualifiedName)¶
建立並返回一個帶名稱空間的屬性節點。tagName 可以有字首。此方法不將屬性節點與任何特定元素關聯。您必須在適當的
Element
物件上使用setAttributeNode()
來使用新建立的屬性例項。
- Document.getElementsByTagName(tagName)¶
搜尋所有具有特定元素型別名稱的後代(直接子節點、子節點的子節點等)。
- Document.getElementsByTagNameNS(namespaceURI, localName)¶
搜尋所有具有特定名稱空間 URI 和本地名稱的後代(直接子節點、子節點的子節點等)。本地名稱是名稱空間中字首之後的部分。
Element 物件¶
Element
是 Node
的子類,因此繼承了該類的所有屬性。
- Element.tagName¶
元素型別名稱。在使用了名稱空間的文件中,它可能包含冒號。該值是一個字串。
- Element.getElementsByTagName(tagName)¶
與
Document
類中的同名方法相同。
- Element.getElementsByTagNameNS(namespaceURI, localName)¶
與
Document
類中的同名方法相同。
- Element.hasAttribute(name)¶
如果元素具有由 name 命名的屬性,則返回
True
。
- Element.hasAttributeNS(namespaceURI, localName)¶
如果元素具有由 namespaceURI 和 localName 命名的屬性,則返回
True
。
- Element.getAttribute(name)¶
以字串形式返回由 name 命名的屬性的值。如果不存在這樣的屬性,則返回一個空字串,就像該屬性沒有值一樣。
- Element.getAttributeNode(attrname)¶
返回由 attrname 命名的屬性的
Attr
節點。
- Element.getAttributeNS(namespaceURI, localName)¶
以字串形式返回由 namespaceURI 和 localName 命名的屬性的值。如果不存在這樣的屬性,則返回一個空字串,就像該屬性沒有值一樣。
- Element.getAttributeNodeNS(namespaceURI, localName)¶
給定 namespaceURI 和 localName,將屬性值作為節點返回。
- 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)¶
向元素新增一個新的屬性節點,如果必要,當
namespaceURI
和localName
屬性匹配時替換現有屬性。如果發生替換,將返回舊的屬性節點。如果 newAttr 已在使用中,則會引發InuseAttributeErr
。
- Element.setAttributeNS(namespaceURI, qname, value)¶
給定 namespaceURI 和 qname,從字串設定屬性值。請注意,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*()
系列方法。
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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
符合性¶
本節描述了 Python DOM API、W3C DOM 推薦標準以及 OMG IDL 到 Python 的對映之間的符合性要求和關係。
型別對映¶
DOM 規範中使用的 IDL 型別根據下表對映到 Python 型別。
IDL 型別 |
Python 型別 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
訪問器方法¶
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 不要求實現強制執行此類要求。
Comment 物件¶
Comment
表示 XML 文件中的註釋。它是Node
的子類,但不能有子節點。註釋的內容作為字串。該屬性包含前導
<!-
-
和尾隨-
->
之間的所有字元,但不包括它們。