xml.dom
— 文件物件模型 API¶
文件物件模型,或“DOM”,是全球資訊網聯盟 (W3C) 提供的跨語言 API,用於訪問和修改 XML 文件。DOM 實現將 XML 文件表示為樹結構,或者允許客戶端程式碼從頭構建這樣的結構。然後,它透過一組提供眾所周知的介面的物件來訪問該結構。
DOM 對於隨機訪問應用程式非常有用。SAX 只允許您一次檢視文件的一小部分。如果您正在檢視一個 SAX 元素,則無法訪問另一個元素。如果您正在檢視一個文字節點,則無法訪問包含元素。當您編寫 SAX 應用程式時,您需要在自己的程式碼中跟蹤程式在文件中的位置。SAX 不會為您執行此操作。此外,如果您需要在 XML 文件中向前看,那您就倒黴了。
某些應用程式在事件驅動模型中根本不可能實現,因為無法訪問樹。當然,您可以在 SAX 事件中自己構建某種樹,但 DOM 允許您避免編寫該程式碼。DOM 是 XML 資料的標準樹表示形式。
文件物件模型正由 W3C 分階段或在其術語中為“級別”進行定義。API 的 Python 對映主要基於 DOM Level 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) Level 2 規範
Python DOM API 基於的 W3C 建議。
- 文件物件模型 (DOM) Level 1 規範
xml.dom.minidom
支援的 DOM 的 W3C 建議。- Python 語言對映規範
這指定了從 OMG IDL 到 Python 的對映。
模組內容¶
xml.dom
包含以下函式
- xml.dom.registerDOMImplementation(name, factory)¶
使用名稱 name 註冊 factory 函式。factory 函式應返回一個實現
DOMImplementation
介面的物件。factory 函式可以每次返回相同的物件,也可以每次呼叫返回一個新的物件,這取決於具體的實現(例如,如果該實現支援某些自定義)。
- xml.dom.getDOMImplementation(name=None, features=())¶
返回合適的 DOM 實現。name 是眾所周知的,DOM 實現的模組名稱或
None
。如果不是None
,則匯入相應的模組,如果匯入成功,則返回一個DOMImplementation
物件。如果未指定名稱,並且如果設定了環境變數PYTHON_DOM
,則使用此變數來查詢實現。如果未給出名稱,則檢查可用的實現以查詢具有所需功能集的實現。如果找不到任何實現,則引發
ImportError
。features 列表必須是傳遞給可用DOMImplementation
物件上的hasFeature()
方法的(feature, version)
對的序列。
還提供了一些方便的常量
- xml.dom.EMPTY_NAMESPACE¶
用於指示 DOM 中沒有名稱空間與節點關聯的值。這通常作為節點的
namespaceURI
找到,或者用作名稱空間特定方法的 namespaceURI 引數。
- xml.dom.XML_NAMESPACE¶
與保留字首
xml
關聯的名稱空間 URI,如 XML 中的名稱空間(第 4 節)中所定義。
- xml.dom.XMLNS_NAMESPACE¶
名稱空間宣告的名稱空間 URI,如 文件物件模型 (DOM) Level 2 Core 規範(第 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 的根),其中包含一個具有給定 namespaceUri 和 qualifiedName 的子Element
物件。 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,但這個特定的介面似乎沒有爭議。 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
物件將其子節點列表作為其中之一提供,並且 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
表示整個 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
是 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
屬性的適當值。
- 異常 xml.dom.DOMException¶
用於所有特定 DOM 異常的基類異常。此異常類不能直接例項化。
- 異常 xml.dom.DomstringSizeErr¶
當指定的文字範圍不適合字串時引發。這在 Python DOM 實現中尚未使用,但可能從非 Python 編寫的 DOM 實現中接收到。
- 異常 xml.dom.HierarchyRequestErr¶
當嘗試插入節點,而該節點的型別不允許時引發。
- 異常 xml.dom.IndexSizeErr¶
當方法的索引或大小引數為負數或超出允許值時引發。
- 異常 xml.dom.InuseAttributeErr¶
當嘗試插入一個
Attr
節點,而該節點已存在於文件的其他位置時引發。
- 異常 xml.dom.InvalidAccessErr¶
如果引數或操作在底層物件上不受支援,則引發。
- 異常 xml.dom.InvalidCharacterErr¶
當字串引數包含 XML 1.0 建議中不允許的字元時,會引發此異常。例如,嘗試建立一個元素型別名稱中帶有空格的
Element
節點將導致引發此錯誤。
- 異常 xml.dom.InvalidModificationErr¶
當嘗試修改節點的型別時引發。
- 異常 xml.dom.InvalidStateErr¶
當嘗試使用未定義或不再可用的物件時引發。
- 異常 xml.dom.NotFoundErr¶
當節點在引用的上下文中不存在時引發的異常。例如,如果傳入的節點在對映中不存在,
NamedNodeMap.removeNamedItem()
將引發此異常。
- 異常 xml.dom.NotSupportedErr¶
當實現不支援請求的物件型別或操作時引發。
- 異常 xml.dom.NoDataAllowedErr¶
如果為不支援資料的節點指定資料,則會引發此異常。
- 異常 xml.dom.NoModificationAllowedErr¶
嘗試修改不允許修改的物件(例如只讀節點)時引發。
- 異常 xml.dom.SyntaxErr¶
當指定無效或非法字串時引發。
- 異常 xml.dom.WrongDocumentErr¶
當節點插入到與當前所屬文件不同的文件中,並且實現不支援將節點從一個文件遷移到另一個文件時引發。
DOM 建議中定義的異常程式碼根據下表對映到上述異常
常量 |
異常 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一致性¶
本節描述了 Python DOM API、W3C DOM 建議以及 Python 的 OMG IDL 對映之間的一致性要求和關係。
型別對映¶
DOM 規範中使用的 IDL 型別根據下表對映到 Python 型別。
IDL 型別 |
Python 型別 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
訪問器方法¶
OMG IDL 到 Python 的對映為 IDL attribute
宣告定義了訪問器函式,其方式與 Java 對映非常相似。對映 IDL 宣告
readonly attribute string someValue;
attribute string anotherValue;
會生成三個訪問器函式:someValue
的 “get” 方法 (_get_someValue()
),以及 anotherValue
的 “get” 和 “set” 方法 (_get_anotherValue()
和 _set_anotherValue()
)。特別是,該對映不要求 IDL 屬性可以作為普通的 Python 屬性訪問:不要求 object.someValue
可以工作,並且可能會引發 AttributeError
。
但是,Python DOM API 確實要求普通的屬性訪問有效。這意味著 Python IDL 編譯器生成的典型代理不太可能工作,並且如果透過 CORBA 訪問 DOM 物件,則客戶端可能需要包裝器物件。雖然這確實需要對 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
的子類,但不能有子節點。註釋的內容,以字串形式表示。該屬性包含前導
<!-
-
和尾隨-
->
之間的所有字元,但不包括它們。