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)
- 文字列 feature と version のペアで識別される機能が実装されている場合は、
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)
- 指定された qualifiedName 、 publicId 、および systemId 文字列をカプセル化する、新しい
DocumentType
オブジェクトを返します。これは、XMLドキュメントタイプ宣言に含まれる情報を表します。 。
ノードオブジェクト
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.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 が返されます。 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の推奨事項で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
に設定されます。
DocumentType
はNode
の特殊化であり、次の属性を追加します。
- 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)
- パラメータとして渡された 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)
- 名前で属性を削除します。 qnameではなくlocalNameを使用することに注意してください。 一致する属性がない場合、例外は発生しません。
- 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*()
ファミリーのメソッドを使用することもできます。
テキストおよび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は、そのような要件を強制するための実装を必要としません。
コメントオブジェクト
Comment
は、XMLドキュメント内のコメントを表します。Node
のサブクラスですが、子ノードを持つことはできません。<!-
-
と末尾の-
->
の間のすべての文字が含まれますが、それらは含まれません。