xml.dom —ドキュメントオブジェクトモデルAPI —Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/xml.dom
移動先:案内検索

xml.dom —ドキュメントオブジェクトモデルAPI

ソースコード: :source: `Lib / xml / dom / __ init __。py`



ドキュメントオブジェクトモデル(「DOM」)は、XMLドキュメントにアクセスして変更するためのWorld Wide Webコンソーシアム(W3C)のクロスランゲージAPIです。 DOM実装は、XMLドキュメントをツリー構造として提示するか、クライアントコードがそのような構造を最初から構築できるようにします。 次に、よく知られたインターフェイスを提供する一連のオブジェクトを介して構造にアクセスできるようにします。

DOMは、ランダムアクセスアプリケーションに非常に役立ちます。 SAXでは、一度に1ビットのドキュメントしか表示できません。 1つのSAX要素を見ている場合、別の要素にアクセスすることはできません。 テキストノードを見ている場合、含まれている要素にアクセスすることはできません。 SAXアプリケーションを作成するときは、ドキュメント内のプログラムの位置を独自のコードのどこかに追跡する必要があります。 SAXはあなたのためにそれをしません。 また、XMLドキュメントを先読みする必要がある場合は、運が悪いだけです。

一部のアプリケーションは、ツリーにアクセスできないイベント駆動型モデルでは単純に不可能です。 もちろん、SAXイベントで自分である種のツリーを構築することもできますが、DOMを使用すると、そのコードの記述を回避できます。 DOMは、XMLデータの標準的なツリー表現です。

ドキュメントオブジェクトモデルは、W3Cによって段階的に、つまり用語の「レベル」で定義されています。 APIのPythonマッピングは、実質的にDOMレベル2の推奨事項に基づいています。

DOMアプリケーションは通常、一部のXMLをDOMに解析することから始まります。 これがどのように達成されるかは、DOMレベル1ではまったくカバーされておらず、レベル2では限られた改善しか提供されていません。Document作成メソッドへのアクセスを提供するDOMImplementationオブジェクトクラスがありますが、実装に依存しない方法でXMLリーダー/パーサー/ドキュメントビルダーにアクセスします。 また、既存のDocumentオブジェクトなしでこれらのメソッドにアクセスするための明確に定義された方法はありません。 Pythonでは、各DOM実装は関数 getDOMImplementation()を提供します。 DOMレベル3は、リーダーへのインターフェイスを定義するロード/ストア仕様を追加しますが、これはPython標準ライブラリではまだ利用できません。

DOMドキュメントオブジェクトを取得したら、そのプロパティとメソッドを介してXMLドキュメントの一部にアクセスできます。 これらのプロパティは、DOM仕様で定義されています。 リファレンスマニュアルのこの部分では、Pythonでの仕様の解釈について説明しています。

W3Cによって提供される仕様は、Java、ECMAScript、およびOMGIDLのDOMAPIを定義します。 ここで定義されているPythonマッピングは、仕様のIDLバージョンに大部分基づいていますが、厳密な準拠は必要ありません(ただし、実装はIDLからの厳密なマッピングを自由にサポートできます)。 マッピング要件の詳細については、セクション適合性を参照してください。

も参照してください

ドキュメントオブジェクトモデル(DOM)レベル2仕様
Python DOMAPIの基礎となるW3C勧告。
ドキュメントオブジェクトモデル(DOM)レベル1仕様
xml.dom.minidom でサポートされているDOMのW3C勧告。
Python言語マッピング仕様
これは、OMGIDLからPythonへのマッピングを指定します。


モジュールの内容

xml.dom には、次の関数が含まれています。

xml.dom.registerDOMImplementation(name, factory)
factory 関数を name という名前で登録します。 ファクトリ関数は、DOMImplementationインターフェイスを実装するオブジェクトを返す必要があります。 ファクトリ関数は、特定の実装に応じて、毎回同じオブジェクトを返すことも、呼び出しごとに新しいオブジェクトを返すこともできます(例: その実装が何らかのカスタマイズをサポートしている場合)。
xml.dom.getDOMImplementation(name=None, features=())

適切なDOM実装を返します。 name は、既知のDOM実装のモジュール名、またはNoneのいずれかです。 Noneでない場合は、対応するモジュールをインポートし、インポートが成功するとDOMImplementationオブジェクトを返します。 名前が指定されておらず、環境変数 PYTHON_DOMが設定されている場合、この変数は実装を見つけるために使用されます。

名前が指定されていない場合は、使用可能な実装を調べて、必要な機能セットを備えた実装を見つけます。 実装が見つからない場合は、 ImportError を発生させます。 機能リストは、使用可能なDOMImplementationオブジェクトのhasFeature()メソッドに渡される(feature, version)ペアのシーケンスである必要があります。

いくつかの便利な定数も提供されています。

xml.dom.EMPTY_NAMESPACE
DOM内のノードに名前空間が関連付けられていないことを示すために使用される値。 これは通常、ノードのnamespaceURIとして検出されるか、名前空間固有のメソッドの namespaceURI パラメーターとして使用されます。
xml.dom.XML_NAMESPACE
XML 名前空間(セクション4)で定義されている、予約済みプレフィックスxmlに関連付けられた名前空間URI。
xml.dom.XMLNS_NAMESPACE
Document Object Model(DOM)レベル2コア仕様(セクション1.1.8)で定義されている名前空間宣言の名前空間URI。
xml.dom.XHTML_NAMESPACE
XHTML 1.0:Extensible HyperText Markup Language (セクション3.1.1)で定義されているXHTML名前空間のURI。

さらに、 xml.dom には、基本NodeクラスとDOM例外クラスが含まれています。 このモジュールによって提供されるNodeクラスは、DOM仕様で定義されたメソッドまたは属性を実装していません。 具体的なDOM実装はそれらを提供する必要があります。 このモジュールの一部として提供されるNodeクラスは、具象NodeオブジェクトのnodeType属性に使用される定数を提供します。 これらは、DOM仕様に準拠するために、モジュールレベルではなく、クラス内に配置されています。


DOM内のオブジェクト

DOMの最も信頼のおけるドキュメントは、W3CのDOM仕様です。

DOM属性は、単純な文字列ではなくノードとして操作することもできることに注意してください。 ただし、これを行う必要があることはかなりまれであるため、この使用法はまだ文書化されていません。

インターフェース セクション 目的
DOMImplementation DOMImplementationオブジェクト 基盤となる実装へのインターフェース。
Node ノードオブジェクト ドキュメント内のほとんどのオブジェクトの基本インターフェイス。
NodeList NodeListオブジェクト 一連のノードのインターフェース。
DocumentType DocumentTypeオブジェクト ドキュメントの処理に必要な宣言に関する情報。
Document ドキュメントオブジェクト ドキュメント全体を表すオブジェクト。
Element 要素オブジェクト ドキュメント階層の要素ノード。
Attr Attrオブジェクト 要素ノード上の属性値ノード。
Comment コメントオブジェクト ソースドキュメント内のコメントの表現。
Text テキストおよびCDATASectionオブジェクト ドキュメントのテキストコンテンツを含むノード。
ProcessingInstruction ProcessingInstructionオブジェクト 処理命令表現。

追加のセクションでは、PythonでDOMを操作するために定義された例外について説明します。

DOMImplementationオブジェクト

DOMImplementationインターフェイスは、アプリケーションが使用しているDOMの特定の機能の可用性を判断する方法を提供します。 DOMレベル2では、DOMImplementationを使用して新しいDocumentおよびDocumentTypeオブジェクトを作成する機能も追加されました。

DOMImplementation.hasFeature(feature, version)
文字列 featureversion のペアで識別される機能が実装されている場合は、Trueを返します。
DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)
新しいDocumentオブジェクト(DOMのルート)を返します。子Elementオブジェクトは、指定された namespaceUri および qualifiedName を持ちます。 doctype は、 createDocumentType()またはNoneによって作成されたDocumentTypeオブジェクトである必要があります。 Python DOM APIでは、Elementの子が作成されないことを示すために、最初の2つの引数をNoneにすることもできます。
DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)
指定された qualifiedNamepublicId 、および systemId 文字列をカプセル化する、新しいDocumentTypeオブジェクトを返します。これは、XMLドキュメントタイプ宣言に含まれる情報を表します。 。


ノードオブジェクト

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レベル3 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の推奨事項で2つの方法で使用されます。Elementオブジェクトは子ノードのリストとして1つを提供し、getElementsByTagName()およびgetElementsByTagNameNS()メソッドはNodeクエリ結果を表すために、このインターフェイスでオブジェクトを返します。

DOMレベル2の推奨事項では、これらのオブジェクトに対して1つのメソッドと1つの属性を定義しています。

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
文書型定義の外部サブセットのシステムID。 これは、文字列としての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)
パラメータとして渡された targetdata を含む処理命令ノードを作成して返します。 他の作成方法と同様に、これはノードをツリーに挿入しません。
Document.createAttribute(name)
属性ノードを作成して返します。 このメソッドは、属性ノードを特定の要素に関連付けません。 新しく作成された属性インスタンスを使用するには、適切なElementオブジェクトでsetAttributeNode()を使用する必要があります。
Document.createAttributeNS(namespaceURI, qualifiedName)
名前空間を持つ属性ノードを作成して返します。 tagName にはプレフィックスが付いている場合があります。 このメソッドは、属性ノードを特定の要素に関連付けません。 新しく作成された属性インスタンスを使用するには、適切なElementオブジェクトでsetAttributeNode()を使用する必要があります。
Document.getElementsByTagName(tagName)
特定の要素タイプ名を持つすべての子孫(直接の子、子の子など)を検索します。
Document.getElementsByTagNameNS(namespaceURI, localName)
特定の名前空間URIとローカル名を持つすべての子孫(直接の子、子の子など)を検索します。 ローカル名は、プレフィックスの後の名前空間の一部です。


要素オブジェクト

ElementNodeのサブクラスであるため、そのクラスのすべての属性を継承します。

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)
名前で属性を削除します。 qnameではなくlocalNameを使用することに注意してください。 一致する属性がない場合、例外は発生しません。
Element.setAttribute(name, value)
文字列から属性値を設定します。
Element.setAttributeNode(newAttr)
要素に新しい属性ノードを追加し、name属性が一致する場合は、必要に応じて既存の属性を置き換えます。 置換が発生した場合、古い属性ノードが返されます。 newAttr がすでに使用されている場合、 InuseAttributeErr が発生します。
Element.setAttributeNodeNS(newAttr)
要素に新しい属性ノードを追加し、namespaceURI属性とlocalName属性が一致する場合は、必要に応じて既存の属性を置き換えます。 置換が発生した場合、古い属性ノードが返されます。 newAttr がすでに使用されている場合、 InuseAttributeErr が発生します。
Element.setAttributeNS(namespaceURI, qname, value)
namespaceURIqname を指定して、文字列から属性値を設定します。 qnameは属性名全体であることに注意してください。 これは上記とは異なります。


Attrオブジェクト

AttrNodeから継承するため、そのすべての属性を継承します。

Attr.name
属性名。 名前空間を使用するドキュメントでは、コロンが含まれる場合があります。
Attr.localName
コロンがある場合はコロンに続く名前の部分、それ以外の場合は名前全体。 これは読み取り専用の属性です。
Attr.prefix
コロンがある場合はコロンの前にある名前の部分、それ以外の場合は空の文字列。
Attr.value
属性のテキスト値。 これはnodeValue属性の同義語です。


NamedNodeMapオブジェクト

NamedNodeMapNodeから継承しません

NamedNodeMap.length
属性リストの長さ。
NamedNodeMap.item(index)
特定のインデックスを持つ属性を返します。 属性を取得する順序は任意ですが、DOMの存続期間中は一貫しています。 各アイテムは属性ノードです。 value属性を使用してその値を取得します。

このクラスにより多くのマッピング動作を与える実験的なメソッドもあります。 それらを使用することも、Elementオブジェクトで標準化されたgetAttribute*()ファミリーのメソッドを使用することもできます。


コメントオブジェクト

Commentは、XMLドキュメント内のコメントを表します。 Nodeのサブクラスですが、子ノードを持つことはできません。

Comment.data
文字列としてのコメントの内容。 属性には、先頭の<!- -と末尾の- ->の間のすべての文字が含まれますが、それらは含まれません。


テキストおよびCDATASectionオブジェクト

Textインターフェイスは、XMLドキュメント内のテキストを表します。 パーサーとDOM実装がDOMのXML拡張をサポートしている場合、CDATAでマークされたセクションで囲まれたテキストの一部は、CDATASectionオブジェクトに格納されます。 これらの2つのインターフェースは同一ですが、nodeType属性に異なる値を提供します。

これらのインターフェースは、Nodeインターフェースを拡張します。 子ノードを持つことはできません。

Text.data
文字列としてのテキストノードのコンテンツ。

ノート

CDATASectionノードの使用は、ノードが完全なCDATAマーク付きセクションを表すことを示すのではなく、ノードのコンテンツがCDATAセクションの一部であったことのみを示します。 単一のCDATAセクションは、ドキュメントツリー内の複数のノードで表すことができます。 2つの隣接するCDATASectionノードが異なるCDATAマーク付きセクションを表すかどうかを判断する方法はありません。


ProcessingInstructionオブジェクト

XMLドキュメント内の処理命令を表します。 これはNodeインターフェースから継承し、子ノードを持つことはできません。

ProcessingInstruction.target
最初の空白文字までの処理命令の内容。 これは読み取り専用の属性です。
ProcessingInstruction.data
最初の空白文字に続く処理命令の内容。


例外

DOMレベル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
この例外は、文字列パラメーターに、XML1.0推奨で使用されているコンテキストで許可されていない文字が含まれている場合に発生します。 たとえば、要素タイプ名にスペースを使用してElementノードを作成しようとすると、このエラーが発生します。
exception xml.dom.InvalidModificationErr
ノードのタイプを変更しようとしたときに発生します。
exception xml.dom.InvalidStateErr
定義されていない、または使用できなくなったオブジェクトを使用しようとしたときに発生します。
exception xml.dom.NamespaceErr
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推奨で定義されている例外コードは、次の表に従って上記の例外にマップされます。

絶え間ない 例外
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の推奨事項、およびPythonのOMGIDLマッピング間の適合要件と関係について説明します。

タイプマッピング

DOM仕様で使用されるIDLタイプは、次の表に従ってPythonタイプにマップされます。

IDLタイプ Pythonタイプ
boolean boolまたはint
int int
long int int
unsigned int int
DOMString strまたはbytes
null None


アクセサメソッド

OMG IDLからPythonへのマッピングは、Javaマッピングとほぼ同じ方法で、IDL attribute宣言のアクセサー関数を定義します。 IDL宣言のマッピング

readonly attribute string someValue;
         attribute string anotherValue;

someValue_get_someValue())の「get」メソッドとanotherValue_get_anotherValue()および_set_anotherValue())。 特に、マッピングでは、IDL属性が通常のPython属性としてアクセス可能である必要はありません。object.someValue動作する必要はありませんAttributeError が発生する可能性があります。

ただし、Python DOM APIでは、通常の属性アクセスが機能する必要があります。 これは、Python IDLコンパイラによって生成される一般的なサロゲートが機能しない可能性が高く、DOMオブジェクトがCORBAを介してアクセスされる場合、クライアントでラッパーオブジェクトが必要になる可能性があることを意味します。 これにはCORBADOMクライアントに関する追加の考慮事項が必要ですが、PythonからCORBAを介してDOMを使用した経験のある実装者は、これを問題とは見なしません。 readonlyと宣言されている属性は、すべてのDOM実装で書き込みアクセスを制限するわけではありません。

Python DOM APIでは、アクセサ関数は必要ありません。 提供されている場合、それらはPython IDLマッピングで定義された形式をとる必要がありますが、属性はPythonから直接アクセスできるため、これらのメソッドは不要と見なされます。 readonly属性に「セット」アクセサーを指定しないでください。

IDL定義は、getElementsByTagName()の戻り値などの特定のオブジェクトが「ライブ」であるという概念など、W3C DOMAPIの要件を完全には具体化していない。 Python DOM APIは、そのような要件を強制するための実装を必要としません。